Node.js & Socket.io 错误
Error with Node.js & Socket.io
我正在按照此处提供的教程进行操作:
http://www.davidado.com/2013/12/10/node-js-for-user-alert-push-notifications/
目标是允许某人向另一个用户发送消息。
Node 已安装并正常工作。我还安装了 Socket.io.
当我运行
node server.js
我有这个错误:
TypeError: undefined is not a function
at Socket.<anonymous> (/root/nodeapp/server.js:11:39)
server.js(服务器端)是这样的:
var io = require('socket.io').listen(5120);
io.sockets.on('connection', function (socket) {
socket.on('join_room', function (data) {
if (typeof socket !== 'undefined') {
// data.id should be set if user is logged in
if (typeof data.id !== 'undefined' && data.id > 0) {
// Check if socket is already in room
var roomlist = io.sockets.clients(data.id); // returns Socket instances of all clients in the room
var occupantSocket;
if (typeof roomlist[0] !== 'undefined') {
// Should only be one socket in a private room
occupantSocket = roomlist[0];
}
if (socket !== occupantSocket) {
// Socket hasn't joined before so join it now
socket.join(data.id);
}
} else {
// User ID isn't set so disconnect the socket
socket.disconnect();
}
}
});
socket.on('send_msg', function (data) {
if (typeof socket !== 'undefined') {
if (typeof data.id_sendee !== 'undefined' && data.id_sendee > 0) {
// Check if anyone is in the room before broadcasting
var roomlist = io.sockets.clients(data.id_sendee);
if (typeof roomlist[0] !== 'undefined') {
// Push alerts aren't that critical so use volatile
socket.broadcast.to(data.id_sendee).volatile.emit(
'newalert',
{sender: data.sender, msg: data.msg });
}
} else {
socket.disconnect();
}
}
});
});
console.log("Hello , just checking!");
第 11 行是这一行:
var roomlist = io.sockets.clients(data.id); // returns Socket
instances of all clients in the room
在客户端,接收消息的一方:
<html>
<head>
<title>Test Node</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
<script type="text/javascript">
var socket = io.connect('http://IPAdressofMyServer:5120');
socket.emit('join_room', { id: 234 });
// Listen for 'newalert' event from node server at server.js
socket.on('newalert', function (data) {
alert( data.msg + ' from ' + data.sender );
});
</script>
</head>
<body>
</body>
</html>
当我在我的控制台中启动节点 server.js 时,没有错误,但是一旦我刷新客户端(使用上面的代码),就会触发错误。
知道问题出在哪里吗?
谢谢你的帮助!
该功能在 1.0.x 版本中不可用。
请根据此更改您的代码link:getting how many people are in a chat room in socket.io
我正在按照此处提供的教程进行操作: http://www.davidado.com/2013/12/10/node-js-for-user-alert-push-notifications/ 目标是允许某人向另一个用户发送消息。
Node 已安装并正常工作。我还安装了 Socket.io.
当我运行
node server.js
我有这个错误:
TypeError: undefined is not a function
at Socket.<anonymous> (/root/nodeapp/server.js:11:39)
server.js(服务器端)是这样的:
var io = require('socket.io').listen(5120);
io.sockets.on('connection', function (socket) {
socket.on('join_room', function (data) {
if (typeof socket !== 'undefined') {
// data.id should be set if user is logged in
if (typeof data.id !== 'undefined' && data.id > 0) {
// Check if socket is already in room
var roomlist = io.sockets.clients(data.id); // returns Socket instances of all clients in the room
var occupantSocket;
if (typeof roomlist[0] !== 'undefined') {
// Should only be one socket in a private room
occupantSocket = roomlist[0];
}
if (socket !== occupantSocket) {
// Socket hasn't joined before so join it now
socket.join(data.id);
}
} else {
// User ID isn't set so disconnect the socket
socket.disconnect();
}
}
});
socket.on('send_msg', function (data) {
if (typeof socket !== 'undefined') {
if (typeof data.id_sendee !== 'undefined' && data.id_sendee > 0) {
// Check if anyone is in the room before broadcasting
var roomlist = io.sockets.clients(data.id_sendee);
if (typeof roomlist[0] !== 'undefined') {
// Push alerts aren't that critical so use volatile
socket.broadcast.to(data.id_sendee).volatile.emit(
'newalert',
{sender: data.sender, msg: data.msg });
}
} else {
socket.disconnect();
}
}
});
});
console.log("Hello , just checking!");
第 11 行是这一行:
var roomlist = io.sockets.clients(data.id); // returns Socket instances of all clients in the room
在客户端,接收消息的一方:
<html>
<head>
<title>Test Node</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script>
<script type="text/javascript">
var socket = io.connect('http://IPAdressofMyServer:5120');
socket.emit('join_room', { id: 234 });
// Listen for 'newalert' event from node server at server.js
socket.on('newalert', function (data) {
alert( data.msg + ' from ' + data.sender );
});
</script>
</head>
<body>
</body>
</html>
当我在我的控制台中启动节点 server.js 时,没有错误,但是一旦我刷新客户端(使用上面的代码),就会触发错误。
知道问题出在哪里吗? 谢谢你的帮助!
该功能在 1.0.x 版本中不可用。
请根据此更改您的代码link:getting how many people are in a chat room in socket.io