我具有与socket.io安装(一点点更复杂,但是本质上是这样一种)的节点服务器非常简单的配置:Socket.io连接,但没有进行通信
var main = require('express')();
server = require('http').createServer(main);
io = require('socket.io')(server);
io.use(function(socket, next) {
console.log("middleware!");
next();
});
io.on('connection', function (socket) {
console.log('connected...');
socket.on('pong', function (data) {
console.log(data.message);
});
setTimeout(function() {
console.log("Saying hello");
socket.emit('ping', { message: 'Hello from server ' + Date.now() });
}, 1000);
});
server.listen(2080, function onCreateServerMain() {
console.log('Server main is listening on port 2080';
console.log('************************************************************');
});
在客户端:
var socketIoScript,
loadSocketTimeout,
trialsToLoadSocketIo = 0,
APP_CFG = {baseUrl : "http://192.168.1.13:2080"};
function loadSocketIo(socketIoIp) {
socketIoScript = document.createElement('script');
socketIoScript.setAttribute('src', socketIoIp);
socketIoScript.setAttribute('onload', 'onSocketLoaded();');
document.head.appendChild(socketIoScript);
}
window.onSocketLoaded = function onSocketLoaded() {
if (typeof(io.connect) === 'function') {
var mSocket,
mIoSocket;
$timeout.cancel(loadSocketTimeout);
mIoSocket = new io.Manager(APP_CFG.baseUrl);
mIoSocket.connect(function(socket) {
console.log('Connected!!');
});
mIoSocket.on('error', function onSocketError(e) {
console.log('WebSocket Error ' + error);
});
mIoSocket.on('ping', function onPingReceived(e) {
console.log('Server emitted ping: ' + e.data);
mSocket.emit('pong', 'hi server!');
});
}
}
~(function onLoadSocketTimeout() {
var nextTimeout;
if (trialsToLoadSocketIo < 10) {
nextTimeout = 5000;
} else if (trialsToLoadSocketIo > 60) {
nextTimeout = 60000;
} else {
nextTimeout = 1000 * trialsToLoadSocketIo;
}
if (socketIoScript) {
document.head.removeChild(socketIoScript);
}
loadSocketIo(APP_CFG.baseUrl + '/socket.io/socket.io.js#' + trialsToLoadSocketIo);
loadSocketTimeout = $timeout(onLoadSocketTimeout, nextTimeout);
trialsToLoadSocketIo += 1;
})();
(我这样做是因为它是移动应用程序,所以它可能没有连接)。我正在用Brackets和Chrome进行测试。服务器和客户端位于同一台计算机上。在应用程序中的脚本加载罚款,并将其连接到服务器,我可以把它在节点日志看到(编辑:这是所有我在节点控制台中看到):
Server main is listening on port 2080
************************************************************
middleware!
connected...
Saying hello
编辑:在Chrome控制台中,我没有收到任何消息,任何断点在on
听众处停止。如果我停下节点,为Chrome的控制台立即开始记录,它已被断开:
GET http://192.168.1.13:2080/socket.io/?EIO=3&transport=polling&t=1413066902601-6 net::ERR_CONNECTION_REFUSED
GET http://192.168.1.13:2080/socket.io/?EIO=3&transport=polling&t=1413066906606-7 net::ERR_CONNECTION_REFUSED
,但我看不到任何传入的消息。在应用程序中,我没有收到任何传入的消息。即使套接字连接成功,我在这种环境下无法沟通的原因是什么?
EDIT
没有应用正在接收从对方发送的事件。来自节点的日志显示这一点,从Chrome的日志是空的。
编辑
在Chrome应用程式,我没有收到console.log("Connected!");
。但我没有收到ERR_CONNECTION_REFUSED
错误:我没有收到任何东西。
编辑
我设法通过改变管理器选项以获得在应用console.log("Connected!");
:
mIoSocket = new io.Manager(APP_CFG.baseUrl, { autoConnect: false });
由于这是自动连接和连接制成后附的事件,“连接”是从未到达。但我仍然没有收到任何应用程序中的任何事件。
你是什么意思“in th e应用程序我没有收到任何传入消息“?你问关于客户端还是服务器?而且,当你没有收到消息时,你什么时候会收到消息?对不起,但目前尚不清楚你究竟在询问什么情况。你是否知道'socket.io'客户端具有自动重新连接逻辑,并且在重新连接逻辑过期时将报告disconnnect? – jfriend00 2014-10-11 22:40:03
如果你发布了一个问题,一些观众发现他们并不清楚问题,他们会问清楚问题,但是你不会回答这些问题,那么你将错过大多数人回答你的问题的机会。大多数看到你的问题的人会在你发布后的第一个小时内发生。如果你不在身边然后澄清事情,你会错过大多数可以帮助你的人。这个地方不像你明天发布和回来的论坛。您的问题可能会因“不清楚您询问的内容”而被关闭。 – jfriend00 2014-10-11 23:33:20
@ jfriend00 +1你说的所有东西。 OP:console.log('Connected !!')'输出什么东西到你的控制台? – xShirase 2014-10-12 00:54:30