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.


person Michael Trouw    schedule 14.05.2012    source источник


Ответы (3)


websocket.io! от тех же ребят. образец показывает то же самое, о чем вы спрашиваете ... и то, что я потратил 20 часов на поиск (и наконец нашел!)

https://github.com/LearnBoost/websocket.io

Обновление: январь 2014 г.

Репозиторий websocket.io неактивен около 2 лет. Это может быть потому, что он стабилен, или потому, что он заброшен.

У тех же людей есть еще один репозиторий под названием engine.io. В ридми говорится, что это изоморфно с websocket.io ... Похоже, что engine.io - это то место, где сейчас все происходит.

https://github.com/LearnBoost/engine.io

person Kinjal Dixit    schedule 12.12.2012
comment
ну блин, год назад мне бы это пригодилось :) Хотя, как мило с твоей стороны выложить! Пусть это поможет людям, ищущим того же! Также приятно, что они реализовали поддержку широкого спектра спецификаций веб-сокетов. Я обнаружил, что различные реализации спецификаций могут быть настоящей PITA. - person Michael Trouw; 22.01.2013
comment
@span отсутствие обновлений может означать отмену или завершение :) - person Kinjal Dixit; 04.04.2013
comment
Январь 2014: последняя фиксация была 2 года назад. кажется мне брошенным. - person oliver; 24.01.2014

В поисках того же самого я нашел https://github.com/einaros/ws/ и его пример сервера работал у меня с моим уже существующим простым клиентом javascript.

person opiethehokie    schedule 02.05.2014

http://socket.io/#how-to-use По указанной ссылке вниз в нижней части страницы документация socket.io демонстрирует в качестве последнего примера, как использовать их модуль в качестве простого старого сервера xbrowser webSocket.

СЕРВЕР

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>

Надеюсь, это то, что ты ищешь

--Док

person Dr Clue    schedule 14.05.2012
comment
Привет, док, спасибо, но я искал не это. Я ищу реализацию javascript по умолчанию (без использования «io.connect», который поступает из клиентского файла javascript socket.io). это потому, что я использую socket.io в качестве замены моей реализации сервера arduino websocket. поэтому я не могу полагаться на клиентский javascript socket.io. это проясняет мой вопрос? Спасибо! - person Michael Trouw; 15.05.2012
comment
Я понимаю, о чем вы говорите, надеюсь, скоро кто-нибудь ответит. - По сути, вместо того, чтобы думать в терминах своего haxe-кода, вы можете больше говорить о разговоре между сервером socket.io и собственным HTML5 javascript WebSocket (var socket = new WebSocket ('ws: // localhost');) - person Jordan; 07.06.2012