我具有與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