Javascript Can';t向所有套接字(socket.io)发送消息
呵呵,我正在尝试构建一个小型聊天客户端,学习WebSocket如何工作,以便在画布上制作游戏。它在发送套接字时非常有效,但它们只将其发送给编写它的人 我想我错过了一些小东西,但我不明白为什么它不起作用 服务器端代码Javascript Can';t向所有套接字(socket.io)发送消息,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,呵呵,我正在尝试构建一个小型聊天客户端,学习WebSocket如何工作,以便在画布上制作游戏。它在发送套接字时非常有效,但它们只将其发送给编写它的人 我想我错过了一些小东西,但我不明白为什么它不起作用 服务器端代码 var app = require('express')() , server = require('http').createServer(app) , io = require('socket.io').listen(server); server.listen(300
var app = require('express')()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
server.listen(3000);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.on('user-message', function (data) {
console.log(data);
sendMessage(data.message);
});
});
var sendMessage = function(message) {
io.sockets.emit('server-message', {message: message});
}
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('server-message', function (data) {
var history = $('#chatbox').val();
$('#chatbox').val(history + "\n" + data.message)
});
$("#write").keyup(function(event){
if(event.keyCode == 13){
socket.emit('user-message', {message: $(this).val()});
$(this).val('');
}
});
</script>
客户端代码
var app = require('express')()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
server.listen(3000);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.on('user-message', function (data) {
console.log(data);
sendMessage(data.message);
});
});
var sendMessage = function(message) {
io.sockets.emit('server-message', {message: message});
}
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('server-message', function (data) {
var history = $('#chatbox').val();
$('#chatbox').val(history + "\n" + data.message)
});
$("#write").keyup(function(event){
if(event.keyCode == 13){
socket.emit('user-message', {message: $(this).val()});
$(this).val('');
}
});
</script>
var socket=io.connect('http://localhost');
socket.on('server-message',函数(数据){
var history=$(“#聊天室”).val();
$('#chatbox').val(历史+“\n”+数据.message)
});
$(“#写入”).keyup(函数(事件){
如果(event.keyCode==13){
emit('user-message',{message:$(this.val()});
$(this.val(“”);
}
});
您可以使用socket.broadcast.emit
向所有其他套接字发送消息
io.sockets.on('connection', function (socket) {
socket.on('user-message', function (data) {
console.log(data);
sendMessage.call(socket, data.message);
});
});
var sendMessage = function(message) {
this.emit('server-message', {message: message});
this.broadcast.emit('server-message', {message: message});
}
恐怕也没用。只要把它寄回给最先寄来的人就行了。实际上我以前试过广播,认为io.sockets.emit会有帮助,因为它都是sockets。@cubsink您在单个套接字上调用了
broadcast.emit
?我不这么认为,我复制了您的代码。我已尝试将其更改为io.sockets。@cubsink尝试将您的io.sockets.on
call和sendMessage
函数替换为我在答案中找到的函数,看看是否有效。现在发现问题了。。我不认为我的代码有什么问题。客户端与localhost连接,我在后台安装了一台服务器,但没有注意到。因为我先在那里试过,然后我把我所有的代码移到我的另一台服务器上,继续使用一些功能,以便其他服务器可以加入。该死,真是个讨厌的错误。