6

因此,我使用 Haxe NME(HTML5 目标 ofc)构建了一个简单的 websocket 客户端实现。
它连接到

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

效果很好!(我正在使用xirsys_stdjs haxelib 来使用 HTML5 websocket 的东西。)

我想要一个本地(在我自己的机器上)运行 websocket server。我目前正在使用 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 个外部类来实现 webSocket:MozWebSocket 和 WebSocket。这些只是为相应的 JavaScript 类键入的“接口”。

4

3 回答 3

4

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

于 2012-12-12T05:21:18.033 回答
0

在搜索相同的东西时,我发现了https://github.com/einaros/ws/,它的服务器示例适用于我预先存在的纯 JavaScript 客户端。

于 2014-05-02T15:56:32.743 回答
-2

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>

希望这就是你要找的

--文档

于 2012-05-14T16:33:57.160 回答