Node.js Websocket服务器不能在线工作

时间:2015-01-22 18:20:57

标签: javascript php node.js websocket

我在HTML5 + PHP中为游戏实现了一个非常简单的Node.js Websocket服务器。我在本地测试了我的服务器并且工作正常,但是当我部署我的服务器和客户端时(当然是在不同的域中),我只是无法连接它们。 我在https://evennode.com部署了服务器。我是Node.js的新手,也许我在代码中遗漏了一些东西。

var users = [];
var WebSocketServer = require('ws').Server;

var connections = {};
var registered  = {}; 

var connectionIDCounter = 0;

var port = process.env.PORT || 80;

var wss = new WebSocketServer({port: port}, function(){

    console.log('Listening on port: ' + port);

});

wss.on('connection', function(socket) {

    socket.id = connectionIDCounter ++;

    connections[socket.id] = socket;
    registered[socket.id] = 'Guest' + socket.id;

    connections[socket.id].position = {};
    connections[socket.id].position.x = 0;
    connections[socket.id].position.y = 1.8;
    connections[socket.id].position.z = 0;

    console.log('Connected: ' + socket.id);

    socket.on('message', function(message) {
        var resultObject = JSON.parse(message);

        parseMessage(this.id, resultObject);        
    });

    socket.on('close', function(message) {
        sendUserState(this.id, 'disconnected'); 

        delete registered[this.id];
        delete connections[this.id];    

    });

}); 

我将不胜感激。

1 个答案:

答案 0 :(得分:1)

www.evennode.com上的托管使用Phusion Passenger运行Node.js应用程序,后者又使用inverse port binding(如here by the author所述),这使得此示例在由evennode托管时不起作用。融为一体

即使采用“反向端口绑定”,也可以使其工作 首先需要创建一个http服务器,然后将其传递给ws构造函数。

以下简化示例:

var server = require('http').createServer();
var WebSocketServer = require('ws').Server;

var wss = new WebSocketServer({server: server}, function(){});

server.listen(3000);

wss.on('connection', function(socket) {
  ...
});

希望这有助于解决问题 顺便说一句。如果有人有兴趣,还有一个example with Socket.io