iOS程序犭袁即时通迅和直播iOS技术交流园

【如何快速的开发一个完整的iOS直播app】(搭建Socket即

2016-12-24  本文已影响6950人  袁峥

前言

在看这篇之前,如果您还不了解直播原理,请查看这篇文章如何快速的开发一个完整的iOS直播app(原理篇)

在直播中,聊天和发礼物,需要用到及时通讯技术,市面上的App大多数采用的都是第三方SDK,融云,环信等,但是本例子采用websocket搭建及时通讯服务器。

如果喜欢我的文章,可以关注我微博:袁峥Seemygo

即时通讯

即时通讯(Instant messaging,简称IM)是一个终端服务,允许两人或多人使用网路即时的传递文字讯息、档案、语音与视频交流

即时通讯技术原理(了解Socket)

即时通讯连接原理

即时通讯(数据即时传递原理)

WebSocket

Socket.IO简介

Socket.IO教程

Socket.IO建立连接 服务器代码

*   1.面向express框架开发,加载express框架,方便处理get,post请求

*   2.因为socket依赖http,创建http服务器,使用http模块.

*   3.可以通过express创建http服务器http.server(express)

*   4.通过http服务器创建socket

*   5.监听http服务器

```
    // 引入express
var http = require('http');

var express = require('express');

// 创建web服务器
var server = http.Server(express);

// 引入socker
var socketIO = require('socket.io');

// 需要传入服务器,socket基于http
var socket = socketIO(server);

// 监听web服务器
server.listen(8080);
```

Socket.IO建立连接 客户端代码

    #import "客户端-Swift.h"
    NSURL *url = [NSURL URLWithString:@"ws://192.168.0.100:8080"];
    
    SocketIOClient *socket = [[SocketIOClient alloc] initWithSocketURL:url config:@{@"log": @YES, @"forcePolling": @YES}];
    _socket = socket;
    
    [socket connect];
    
    // 监听连接成功
    [socket on:@"connect" callback:^(NSArray * _Nonnull data, SocketAckEmitter * _Nonnull ask) {
        
        NSLog(@"确定与服务器连接");
        
        NSLog(@"%@ %@",data,ask);
        
    }];

SocketIO发送事件,通过事件传递数据

SocketIO 客户端发送事件代码

    [socket emit:@"chat" with:@[@"你好"]];

SocketIO 服务器监听事件代码

// 监听socket连接
socket.on('connection',function(s){

    console.log('监听到客户端连接');

    // data:客户端数组第0个元素
    // data1:客户端数组第1个元素
    s.on('chat',function(data,data1){

        console.log('监听到chat事件');

        console.log(data,data1);
        
    });
    
});

SocketIO 服务器发送事件代码

    socket.emit('chat','服务器'+data);
    socket.emit.broadcast.emit('chat','发给所有客户端,不包含当前客户端'+data);
    socket.emit.sockets.emit('chat','发给所有客户端,包含当前客户端'+data);

SocketIO 客户端监听事件代码

    [socket on:@"chat" callback:^(NSArray * _Nonnull data, SocketAckEmitter * _Nonnull ask) {
        NSLog(@"%@",data[0]);
    }];

SocketIO分组

// 监听socket连接
socket.on('connection',function(s){

    console.log('监听到客户端连接');

    s.on('createRoom',function(roomName){

        s.join(roomName);
        rooms.push(roomName);
        console.log('创建房间'+ roomName);
    });

    s.on('chatRoom',function(data){
        console.log(rooms[0] + '说话');
        socket.to(rooms[0]).emit('chat','房间1的数据');
    });

});
上一篇下一篇

猜你喜欢

热点阅读