我第一次尝试使用Websockets / Node.js / Socket.io / Express,我正在尝试创建一个简单的聊天程序。一切运行正常,我在节点中看到两个客户端。
但是当我尝试执行socket.send()
时,我在Firefox中出错(socket.send不是函数)。它没有抱怨socket.connect()
因此我知道socket.io.js已加载。
这是我的服务器代码:
var sys = require('util');
var express = require('express');
var io = require('socket.io');
var app = express.createServer();
app.listen(8080);
app.use(express.static(__dirname));
app.get('/', function (req, res) {
res.render('index.html', {
title: 'Chat'
});
});
var socket = io.listen(app);
socket.on('connection', function (client) {
client.on('message', function (message) {
console.log("Message: " + JSON.stringify(data));
socket.broadcast(message);
});
client.on('disconnect', function () {});
});
我的客户代码:
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
var socket = new io.Socket("http://localhost:8080");
socket.connect();
然后我做一些代码来获取聊天消息并发送它。
socket.send(JSON.stringify(values));
答案 0 :(得分:1)
socket.broadcast(message);
应为io.sockets.emit('key', message);
当您使用传入的套接字对象时,将连接事件只向该客户端发送信息,向所有客户端发送,您必须使用io.sockets.emit()
。
也与socket.send(JSON.stringify(values));
我认为您想要socket.emit(namespace, data);
从我的一个项目中查看我的连接文件:https://github.com/AdminSpot/HangoutCanopy/blob/master/javascripts/connection.js
答案 1 :(得分:1)
您尚未在服务器端和客户端正确初始化Socket.io。
客户端
new io.Socket("http://localhost:8080");
没有为您提供所需的对象,您需要new io.connect("http://localhost:8080");
。
您需要等到客户端连接到服务器才能发送消息。
服务器端
socket
是Socket.IO发回的对象,您需要使用socket.sockets
才能访问on
。
要广播消息,您需要使用如下客户端对象:client.broadcast.send()
广播中不存在变量data
。你可能意思是message
。
服务器强>
var sys = require('util'),
express = require('express'),
io = require('socket.io'),
app = express.createServer();
app.listen(8080);
app.use(express.static(__dirname));
app.get('/', function (req, res) {
res.render('index.html', {
title: 'Chat'
});
});
var io = io.listen(app);
io.sockets.on('connection', function (client) {
client.on('message', function (message) {
console.log("Message: " + JSON.stringify(message));
client.broadcast.send(message);
});
client.on('disconnect', function () {});
});
<强>客户端强>
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
var socket = new io.connect("http://localhost:8080"),
connected = false;
socket.on('connect', function () {
connected = true;
});
// Use this in your chat function.
if (connected) {
socket.send(JSON.stringify(values));
}
</script>
答案 2 :(得分:0)
您必须等待socket.io在客户端连接
var socket = new io.Socket("http://localhost:8080");
socket.connect();
socket.on('connect', function() {
socket.emit('event', data);
});