我无法弄清楚为什么我的socket.io服务器没有从客户端接收消息。这是我的服务器JS文件:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
console.log('a user connected');
socket.on('bid', function(msg){
console.log('received:' + msg);
});
socket.on('disconnect', function(){
console.log('user disconnected');
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});
这是客户端代码:
$(function () {
var socket = io(':3000/socket.io/socket.io.js');
$('#bid-form').on('submit',function(){
socket.emit('bid', 'test');
console.log('emit');
return false;
});
});
当我打开和关闭浏览器页面时,我在服务器控制台上看到“用户连接”和“用户断开连接”消息,因此我知道它正在进行连接。
当我提交表单时,我在浏览器控制台中看到“emit”消息,因此我知道表单提交事件正在触发,但我没有收到服务器上的测试消息。在客户端或服务器端似乎没有发生任何事情,似乎“socket.emit”函数没有做任何事情。
我做错了什么?
答案 0 :(得分:1)
我的假设是您在localhost
上运行快速服务器。
您似乎直接通过file://
访问HTML文件,除非您的客户端代码由其他Web服务器托管。但无论如何,这里有你如何连接:
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(function () {
var socket = io("http://localhost:3000");
$('#bid-form').on('submit',function(){
socket.emit('bid', 'test');
console.log('emit');
return false;
});
});
</script>
您需要通过socket.io.js
标记加载script
文件。然后通过将socket.io服务器的主机提供给io()
函数来连接到socket.io服务器。