我在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];
});
});
我将不胜感激。
答案 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。