是HTML5的一种新协议,实现浏览器与服务器之间的全双工通信,能更好的节省服务器资源和带宽来实现即时通讯,他是建立在TCP基础上面的,和http一样通过TCP来传输数据
在建立连接后,客户端和服务器都能主动向对方发送或接收数据,就像socket一样
SocketIO只有swift框架,
简单搭建,首先倒入express和socket.io框架
nom init
npm i express --save
npm i socket.io --save
websocket的协议头是ws开头,
//服务器端的代码
// 引入http模块
var http = require('http')
// 引入socket模块
var socketIO = require('socket.io')
//创建web服务器
const server = http.createServer();
// 创建socket服务器
const serverSocket = socketIO(server);
// 监听客户端有没有连接成功,如果连接成功,发送connect事件,通知客户端连接成功
// 第二次握手
serverSocket.on('connection', function(clientSocket)
{
console.log('客户端链接')
// 建立socket连接
// 监听chat聊天事件
clientSocket.on('chat', function(data)
{
//收到事件
console.log('hello')
// data是客户端发过来数据
//clientSocket.emit给当前客户端发送信息
//serverSocket.emit是给所有连接上的客户端发消息,广播
clientSocket.emit('chat','hello 客户端')
console.log(data)
});
});
server.listen(3000);
console.log('开始监听')
OC版APP客户端代码,简单实现
- (void)connectToServer
{
//服务器url
#define ServerUrl @"http://192.168.1.6:3000"
NSURL *url = [NSURL URLWithString:ServerUrl];
//因为版本原因。现在使用SocketManager来创建
self.manager = [[SocketManager alloc] initWithSocketURL:url config:nil];
SocketIOClient *client = self.manager.defaultSocket;
//链接 第一次握手,看看能不能链接
[client connect];
//真正的链接
//服务器给客户端发送连接之后,客户端才会再次像服务器发送connect事件,表示连接成功,第三次握手
//只要链接成功服务器就会给client发送链接成功的事件
[client on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack)
{
NSLog(@"socket connected");
//发送chat事件
[client emit:@"chat" with:@[@"nihao shijie"]];
if (data.count > 0)
{
NSLog(@"%@",data.firstObject);
NSLog(@"%@",data);
}
}];
//监听chat的事件,接受服务器发送过来的数据
[client on:@"chat" callback:^(NSArray * _Nonnull data, SocketAckEmitter * _Nonnull ack)
{
NSLog(@"%@", data);
}];
}
网友评论