我正在使用nodejs和socket.io开发聊天系统。到目前为止,我的应用程序与Internet Explorer 10完美配合,但大多数时候我无法在Firefox或Chrome或Opera上发送消息(但我仍然可以阅读从Chrome / Firefox / Opera中的IE发送的消息)。我的所有浏览器都更新到最新版本,没有任何插件/扩展名。我也试过几个不同的自由端口,但没有任何结果。我正在使用Windows 7环境,所有测试都是在本地完成的。
我不知道出了什么问题,过去几个小时一直在挠头,但无法想象。我是node.js的新手,所以请帮忙!
编辑:我试图通过使用io.set('transports',['websocket'])强制传输到websocket;现在IE也停止工作了,所以看来之前IE工作的原因是socket.io强制IE使用xhr-polling而不是websocket。
我的代码如下(取自http://code.tutsplus.com/tutorials/real-time-chat-with-nodejs-socketio-and-expressjs--net-31708)
服务器index.js
var express = require("express");
var app = express();
var port = 3700;
app.set('views', __dirname + '/tpl');
app.set('view engine', "jade");
app.engine('jade', require('jade').__express);
app.get("/", function(req, res){
res.render("page");
});
app.use(express.static(__dirname + '/public'));
var io = require('socket.io').listen(app.listen(port));
console.log(port);
console.log(io);
io.sockets.on('connection', function (socket) {
console.log("connect");
socket.emit('message', { message: 'welcome to the chat !' });
socket.on('send', function (data) {
io.sockets.emit('message', data);
});
});
console.log("Listening on port " + port);
视图
doctype html
head
title= "Real time web chat"
script(src='/chat.js')
script(src='/socket.io/socket.io.js')
body
#content(style='width: 500px; height: 300px; margin: 0 0 20px 0; border: solid 1px #999; overflow-y: scroll;')
.controls |名称: 输入#名(样式= '宽度:350像素;') BR 输入#字段(式= '宽度:350像素;') 输入#send(type ='button',value ='send')
Chat.js
window.onload = function() {
var messages = [];
var socket = io.connect('http://localhost:3700');
var field = document.getElementById("field");
var sendButton = document.getElementById("send");
var content = document.getElementById("content");
var name = document.getElementById("name");
socket.on('message', function (data) {
if(data.message) {
messages.push(data);
var html = '';
for(var i=0; i<messages.length; i++) {
html += '<b>' + (messages[i].username ? messages[i].username : 'Server') + ': </b>';
html += messages[i].message + '<br />';
}
content.innerHTML = html;
} else {
console.log("There is a problem:", data);
}
});
sendButton.onclick = function() {
if(name.value == "") {
alert("Please type your name!");
} else {
var text = field.value;
socket.emit('send', { message: text, username: name.value });
}
};
}
编辑:根据类似问题Socket.io does not work on Firefox & Chrome,通过在chat.js中添加以下代码来解决问题。我做了它,它现在在chrome / firefox / opera上工作,但它强制浏览器使用long-pooling / ajax而不是websocket,我希望我的浏览器使用websocket(chrome / firefox应该能够支持websocket比IE我认为?)
io.configure('development', function(){
io.set('transports', ['xhr-polling']);
});