客户端 – 服务器 – 作为服务器的Socket.io,作为客户端的’标准’javascript?

所以我使用Haxe NME(HTML5 target ofc)构建了一个简单的websocket客户端实现.
它连接到

ws://echo.websocket.org (sorry no link, SO sees this as an invalid domain)

哪作得很好!
(我使用xirsys_stdjs haxelib来使用HTML5 websocket的东西.)

我希望有一个本地(在我自己的机器上)运行websocket服务器.
我现在正在使用Socket.io,因为我无法找到更简单/更简单的解决方案.

我目前正在尝试使用socket.io作为套接字服务器,但是使用“标准”javascript套接字实现作为客户端(Haxe HTML5),而不使用socket.io库clientside.

有谁知道这是否应该可行?因为我无法让它发挥作用.
这是我的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个extern类用于webSocket实现:MozWebSocket和WebSocket.这些只是相应JavaScript类的类型“接口”.

最佳答案
websocket.io!来自同一个人.示例显示了您要问的完全相同的事情……以及我花了20多个小时搜索的内容(最终找到了!)

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

更新:2014年1月

websocket.io存储库大约2年没有看到任何活动.这可能是因为它是稳定的,或者可能是因为它被抛弃了.

同一个人有另一个名为engine.io的存储库.在自述文件中,他们说这与websocket.io是同构的…似乎engine.io是现在所有行动的地方.

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

转载注明原文:客户端 – 服务器 – 作为服务器的Socket.io,作为客户端的’标准’javascript? - 代码日志