Socket.IO 在 Node JS 中 - 从客户端发出事件不起作用
Socket.IO in NodeJS - emitting event from client-side doesn's works
我在服务器端有这个代码:
var express = require('express');
module.exports = function(io){
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('monitoring', { title: 'monitoring-test' });
});
io.on("connection", function(socket) {
console.log('test connection!');
socket.on("SampleEvent", function (args1) {
console.log('called Sample event');
});
});
return router;
}
在客户端我有:
var socket = io.connect('http://localhost:3000/monitoring')
alert("alertbox1");
$(document).ready(function() {
$("#btnCallEvent").click(function(){
var args1 = {user: "client1", text: "Hello, world!"};
socket.emit("SampleEvent", args);
});
});
OnClick 事件有效,连接也有效 - 打开监控站点后,我在控制台中有 'test connection!'
。但是当我尝试从客户端调用 SampleEvent 时(单击按钮后)什么也没有发生。
这就是我在服务器端使用我的 socket.io
的方式,它适用于我:
文件顶部的设置:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
返回套接字事件:
io.on('connection', function(socket){
socket.on('MyEvent', function(data) {
console.log('My Event has fired and contains:');
console.log(data);
});
});
然后在客户端:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.emit('MyEvent', {EventData1: 'test', EventData2: 'test2' });
</script>
我认为您的问题是您正在连接到 /monitoring,这可能隐含地 select 一个 namespace/room 调用监控。尝试直接连接到 /
io.connect('http://localhost:3000/')
看看这是否有所作为。而且,你在哪里添加你的 socket.io 到底层的 http 服务器(express,在你的情况下)。它没有显示在您的示例中。
我在服务器端有这个代码:
var express = require('express');
module.exports = function(io){
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('monitoring', { title: 'monitoring-test' });
});
io.on("connection", function(socket) {
console.log('test connection!');
socket.on("SampleEvent", function (args1) {
console.log('called Sample event');
});
});
return router;
}
在客户端我有:
var socket = io.connect('http://localhost:3000/monitoring')
alert("alertbox1");
$(document).ready(function() {
$("#btnCallEvent").click(function(){
var args1 = {user: "client1", text: "Hello, world!"};
socket.emit("SampleEvent", args);
});
});
OnClick 事件有效,连接也有效 - 打开监控站点后,我在控制台中有 'test connection!'
。但是当我尝试从客户端调用 SampleEvent 时(单击按钮后)什么也没有发生。
这就是我在服务器端使用我的 socket.io
的方式,它适用于我:
文件顶部的设置:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
返回套接字事件:
io.on('connection', function(socket){
socket.on('MyEvent', function(data) {
console.log('My Event has fired and contains:');
console.log(data);
});
});
然后在客户端:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io();
socket.emit('MyEvent', {EventData1: 'test', EventData2: 'test2' });
</script>
我认为您的问题是您正在连接到 /monitoring,这可能隐含地 select 一个 namespace/room 调用监控。尝试直接连接到 /
io.connect('http://localhost:3000/')
看看这是否有所作为。而且,你在哪里添加你的 socket.io 到底层的 http 服务器(express,在你的情况下)。它没有显示在您的示例中。