我正在使用socket.io进行私人聊天,我正在使用
服务器端socket.broadcast.to(receiver_socket_id).emit('message', data); // where data is a json object containing text
在客户端代码我使用
捕获数据socket.on('message', function (data) {
alert(data. text);
});
当只连接两个套接字(发送方和接收方)时,它正常工作并在特定用户(套接字ID)的面板上显示警报。但是当另一个用户连接到该套接字然后我看到两个警报并且当总共4个用户连接(发送者+接收者+另外两个)然后看到3个警报时出现问题。但好处是我只能看到特定客户的面板而不是其他面板的警报。 我无法理解这个问题,请帮忙。 请看一下 gyazo.com/a98d3a64a9fc6487e6ded8ccd90fd5ab
此处的完整代码: Sever方面(我使用过Redis):
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');
server.listen(8080);
var usernames = {};
io.on('connection', function (socket) {
console.log(socket.id);
socket.on('adduser', function (userId) {
usernames[userId] = socket.id;
});
var redisClient = redis.createClient();
redisClient.subscribe('message-channel');
redisClient.on('message', function (channel, data) {
var jsonObj = JSON.parse(data);
var rcvrId = jsonObj.rcvrId;
socket.broadcast.to(usernames[rcvrId]).emit('message', data); // Not throwing error....should work
});
socket.on('disconnect', function () {
console.log(socket.id + ' Disconnected');
redisClient.quit();
});
});
客户方:
var socket = io.connect('http://localhost:8080');
var userId = $('input[name="userId"]').val();
var rcvrId = $('input[name="rcvrId"]').val();
socket.on('connect', function () {
// call the server-side function 'adduser' and send one parameter (value of prompt)
socket.emit('adduser', userId);
});
socket.on('message', function (data) {
data = jQuery.parseJSON(data);
console.log(data);
$("#messages").append("<div><strong>" + data.userId + " : </strong><span>" + data.message + "</span></div>");
});
答案 0 :(得分:0)
您可以使用/
。如果您使用的是不同的命名空间,只需将 [HttpPost]
public ActionResult getCityJson(string stateId)
{
int _stateid = Convert.ToInt32(stateId);
List<Cities> objcity = new List<Cities>();
objcity = _db.Cities.Where(m => m.stateID == _stateid).ToList();
SelectList obgcity = new SelectList(objcity, "CityID", "CityName", 0);
return Json(obgcity);
}
替换为您的命名空间。