c语言 socket.io,简单的nodejs+socket.io给指定的人发送消息

主要目的是实现向某个指定的用户发送消息,也就是服务端单独推送信息给某个人。具体的思路就是每个在线的用户都对应一个socket对象,可以通过socket.id获取其唯一的id。通过该对象(toSocket)与链接到这个对象的客户端进行单独通信。

socket.io服务端代码

var app = require('http').createServer(handler);

var io = require('socket.io')(app);

var fs = require('fs');

var _ = require('underscore');

// 监听端口

app.listen(3000);

var hashName = new Array();

function handler(req, res) {

fs.readFile(__dirname + '/index.html',

function (err, data) {

res.writeHead(200);

res.end(data);

});

}

// 通过 emit 和 on 可以实现服务器与客户端之间的双向通信

// io.sockets.on('connection', function (socket) { ... }) 的作用是服务器监听所有客户端 并返回该新连接对象

// 这个事件在在客户端与服务器建立链接时自动触发

io.on('connection', function (socket) {

console.log('新加入一个连接。');

// 不管是服务器还是客户端都有 emit 和 on 这两个函数,socket.io 的核心就是这两个函数

socket.on('setRoom', function (data) {

console.log(data);

var name = data.roomId;

// // 储存上线的用户

hashName[name] = socket.id;

});

/**

* on :用来监听一个 emit 发送的事件

* 'sayTo' 为要监听的事件名

* 匿名函数用来接收对方发来的数据

* 这个匿名函数的第一个参数为接收的数据,如果有第二个参数,则是要返回的函数。

*/

socket.on('sayTo', function (data) {

var toName = data.to;

var toId = data.id;

if (toId = hashName[toName]) {

// nodejs的underscore扩展中的findWhere方法,可以在对象集合中,通过对象的属性值找到该对象并返回。

var toSocket = _.findWhere(io.sockets.sockets, {id: toId});

// socket.emit() :向建立该连接的客户端广播

// socket.broadcast.emit() :向除去建立该连接的客户端的所有客户端广播

// io.sockets.emit() :向所有客户端广播,等同于上面两个的和

// 通过该连接对象(toSocket)与链接到这个对象的客户端进行单独通信

toSocket.emit('message', data.msg);

}

});

// 当关闭连接后触发 disconnect 事件

socket.on('disconnect', function () {

console.log('断开一个连接。');

});

});

index.html代码

socket.io演示客户端

socket.io演示客户端

确定

确定

$=function (id) {

return document.getElementById(id);

};

var socket = io.connect('127.0.0.1:3000');

var setRoom = document.getElementsByTagName("button")[0],

sayTo = document.getElementsByTagName("button")[1],

msg = $("msg"),

word = $("word"),

toRoom=$("toRoomId");

setRoom.οnclick=function(){

socket.emit('setRoom',{"roomId":$("roomId").value}) ;

};

sayTo.οnclick=function () {

var toMsg=msg.value;

socket.emit("sayTo",{"to":toRoom.value,"msg":toMsg});

};

// 当收到对方发来的数据后触发 message 事件

socket.on('message',function (data) {

word.innerHTML+="

"+data+"

";

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值