Socket.io как сервер, "стандартный" javascript как клиент?
Итак, я построил простую реализацию клиента websocket, используя Haxe NME (цель HTML5 ofc).
Подключается к
ws://echo.websocket.org (sorry no link, SO sees this as an invalid domain)
который работает отлично! (Я использую xirsys_stdjs haxelib для использования веб- сокетов HTML5.)
Я хочу иметь локальный (на своей машине) сервер websocket. Сейчас я использую Socket.io, потому что не могу найти более легкое / простое решение.
В настоящее время я пытаюсь использовать socket.io в качестве сервера сокетов, но "стандартную" реализацию сокетов javascript в качестве клиента (Haxe HTML5), не используя библиотеку socket.io на стороне клиента.
Кто-нибудь знает, возможно ли это? потому что я не могу заставить его работать. Вот мой код socket.io:
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
app.listen(1337);
function handler (req, res) {
fs.readFile(__dirname + '/client.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
// WEBSOCKET IMPLEMENTATION
io.sockets.on('connection', function (socket) {
console.log("webSocket connected...");
socket.on('message', function () {
console.log("server recieved something");
// TODO: find out how to access data recieved.
// probably 'msg' parameter, omitted in example?
});
socket.on('disconnect', function () {
console.log("webSocket disconnected.");
});
});
А вот мой Haxe (клиентский) код:
static var webSocketEndPoint:String = "ws://echo.websocket.org";
//static var webSocketEndPoint:String = "ws://localhost:1337";
...
private function initializeWebSocket ():Void {
if (untyped __js__('"MozWebSocket" in window') ) {
websocket = new MozWebSocket(webSocketEndPoint);
trace("websocket endpoint: " + webSocketEndPoint);
} else {
websocket = new WebSocket(webSocketEndPoint);
}
// add websocket JS events
websocket.onopen = function (event:Dynamic):Void {
jeash.Lib.trace("websocket opened...");
websocket.send("hello HaXe WebSocket!");
}
websocket.onerror = function (event:Dynamic):Void {
jeash.Lib.trace("websocket erred... " + event.data);
}
websocket.onmessage = function (event:Dynamic):Void {
jeash.Lib.trace("recieved message: " + event.data);
switchDataRecieved(event.data);
}
websocket.onclose = function (event:Dynamic):Void {
jeash.Lib.trace("websocket closed.");
}
}
На случай, если код Haxe неясен: он использует 2 внешних класса для реализации webSocket: MozWebSocket и WebSocket. Это просто типизированные "интерфейсы" для соответствующих классов JavaScript.
3 ответа
websocket.io! от тех же парней. Пример показывает то же самое, о чем вы спрашиваете... и то, что я потратил за последние 20 часов на поиск (и наконец нашел!)
https://github.com/LearnBoost/websocket.io
Обновление: январь 2014
Репозиторий websocket.io не видел активности около 2 лет. Это может быть потому, что оно стабильно, или потому, что оно заброшено.
У тех же людей есть еще один репозиторий, который называется engine.io. В файле readme говорится, что это изоморфно с websocket.io... Кажется, что engine.io - это то, где все действие происходит в эти дни.
При поиске того же самого, я только что нашел https://github.com/einaros/ws/ и его пример с сервером работал для меня с моим уже существующим простым клиентом javascript.
http://socket.io/ По упомянутой ссылке внизу страницы документация по socket.io демонстрирует в качестве последнего примера, как использовать их модуль в качестве простого старого сервера xbrowser webSocket.,
SERVER
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket)
{
socket.on('message', function () { });
socket.on('disconnect', function () { });
});
БРАУЗЕР
<script>
var socket= io.connect('http://localhost/');
socket.on('connect', function ()
{
socket.send('hi');
socket.on('message', function (msg)
{ // my msg
});
});
</script>
Надеюсь, это то, что вы ищете
--Doc