用java im 框架实现一个IM的server端需要熟悉哪些技术点或框架

基于Java的即时通讯工具的设计与实现【开题报告】_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于Java的即时通讯工具的设计与实现【开题报告】
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
你可能喜欢webrtc哪些程序放在服务器_百度知道
webrtc哪些程序放在服务器
提问者采纳
sip协议由C实现,由于其音视频编码以及P2P传输这一块略显不足,iLBC(audio),添加视频硬件编解码codec。二) imsdroid1)架构,遗憾就是直接调用webrtc的库,webrtc等都是以pjsip插件形式扩充的,一个是google的原因,ios,视频需要下插件:公司局域网内两台机器互通,服务器走外网sip2sip音频质量可以,音视频编解码:NAT方面只支持STUN,所以我暂时放弃考虑Linphone。苹果系统上的idoubs功能就是基于此框架编写) ,马赛克比imsdroid更严重.不过如果谁有跨平台的需要,是用的编译出来的webrtc的库,csipsimple。,音频处理技术等都有涉猎,包括p2p传输,并没有自己的第三方音视频编解码库。支持ICE协议,(ICE支持,包括音视频编解码,音视频编解码用到的第三方库有ffmpeg(video),效果比较满意。但是要把webrtc做成一个移动端的IM软件的话还有一些路要走。csipsimple的话。不过webrtc代码里看到可以使用外部codec,如需要完全实现P2P视频通话需要实现符合ICE标准的客户端。视频马赛克比较严重。doubango使用了webrtc的AEC技术.2)优缺点,G722,无ICE框架,SIP协议这一块会比较高效,本人也测试过Android端的webrtc内网视频通话。该框架使用ANSCI-C编写:基于doubango(Doubango 是一个基于3GPP IMS&#47,VP8(video),一个是其视频通话相关关键技术都比较成熟的原因,PCMA:sipdroid比较轻量级。如果要自己在imsdroid上更新webrtc担心兼容性问题,技术会比较成熟,视频效果还是不太理想.,但是AEC打开了还是有点回音(应该可以修复),我们要做的工作会比较多,ICE):公司局域网内两台机器互通,支持平台广泛 windows,添加回音消除,音频方面没看到AEC等技术,这个还是有希望调到H264的.音视频编码格式大部分都支持(H264(video)。如果要改善音频的话不太方便,由于其代码实在庞大,视频方面还不是太完善,开发比较活跃,类似gstreamer。并且该项目跟进新技术比较快,Demo的音频效果可以。imsdroid。NAT支持ICE(stun+turn)2)效果实测测试环境.)。NAT传输支持stun server,silk(audio),具有很好的可移植性,音视频codec,包括NAT传输,android,都是围绕pjsip的。。3)实测效果测试环境,着重基于java开发(音频codec除外),NetEQ等gips音频技术。五) webrtcimsdroid,服务器走外网sip2sip音频质量可以. webrtc如果有技术实力的开发公司个人还是觉得可以选择这个来做,webrtc:csipsimple架构比较清晰,java通过JNI调用。VP8在移动端的硬件编解码支持的平台没几个(RK可以支持VP8硬件编解码),linphone都想法设法调用webrtc的音频技术。四)Linphone这个是老牌的sip。但是据玩过的同事说linphone在Android上的bug有点多,所以就不做测试了。3)实际测试.默认使用了webrtc的回声算法,延迟1秒左右。不过其因为目前仅支持VP8的视频编码格式(QQ也是)想做高清视频通话的要注意了。个人觉得如果能做出来,不过webrtc基本技术都已经有了,G729),linux。如果做二次开发可以推荐这个:基于sipdroid架构的话,但是其调用webrtc部分没有开源。。其VOIP各个功能也都具备,而最近webrtc更新的比较频繁。总结,可以考虑Linphone或者imsdroid和下面的webrtc,目前只看到调用的是系统自带的MediaRecorder。3)优缺点imsdroid目前来说还是算比较全面的,音频处理技术,无明显回音,官方活跃程度也比较高。并且已经被设计成非常轻便且能有效的工作在低内存和低处理能力的嵌入式系统上,PCMU。2)优缺点,不太好做定制化开发和优化,传输(RTSP。,音频Codec使用skype的silk(Silk编解码是Skype向第三方开发人员和硬件制造商提供免版税认证(RF)的Silk宽带音频编码器)实现, mac,效果会不错的。好像现在开源软件都跨平台了;RCS 并能用于嵌入式和桌面系统的开源框架,希望imsdroid可以直接把需要的webrtc相关源码包进去。三)csipsimple1)sip协议栈用的是pjsip一) sipdroid1)架构sip协议栈使用JAVA实现
其他类似问题
为您推荐:
服务器的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁第三方登录:『 不要让任何事情成为你不去学习的理由!』 —Himi
【Apache Mina2.0开发之一】搭建Apache Mina框架并实现Server与Client端的简单消息传递!
本站文章均为
原创,转载务必在明显处注明:
转载自【黑米GameDev街区】 原文链接:
Hibernate系列学习阶段到此结束了,那么紧接着进入Apache Mina的开发学习,很多童鞋在微薄和QQ中疑问Himi为什么突然脱离游戏开发了,嘿嘿,其实可能更多的童鞋已经看出来了,Himi在偏向服务器Server端开发了,Hibernate、MySQL等都是为了Server端Mina开发而做的铺垫,当前的Apache Mina才是Himi真正的目的。哈哈。Himi的技术目标是“一个人能做出一个网游~”,OK.不多说其他的了,开始Himi的Apache mina开发之旅吧。
对于Apache Mina不太连接的童鞋,请移步到如下百度百科连接进行学习了解:
首先建立一个new project(Server端),这里Himi使用IDE是 eclipse;
OK,首先我们这里先配置下环境:对于Mina的日志输出使用的是slf4j,对于slf4j在开发Hibernate的时候已经很熟悉了,不需要再介绍了。另外一方面就是加入mina的core核心jar包;
1. mina-core.jar
2. slf4j-api.jar
3.slf4j-simple.jar
然后我们首先创建两个类:
HimiObject.java
* @author Himi
import java.io.S
public class HimiObject implements Serializable{
public HimiObject(int id,String name){
this.name=
public int getId() {
public void setId(int id) {
public String getName() {
public void setName(String name) {
this.name =
12345678910111213141516171819202122232425262728293031
/** * @author Himi */&import java.io.Serializable;&public class HimiObject implements Serializable{& public HimiObject(int id,String name){ this.id=id; this.name=name; }& private int id;& private String name;& public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }&}
这个类是个消息Object,它用于server与client端的交互的数据,它需要序列化,所以我们使用Serializable接口;至于在mina框架中起到什么作用这个后续来说;
ClientMinaServerHanlder.java
* @author Himi
import org.apache.mina.core.service.IoHandlerA
import org.apache.mina.core.session.IdleS
import org.apache.mina.core.session.IoS
public class ClientMinaServerHanlder extends IoHandlerAdapter {
private int count = 0;
// 当一个新客户端连接后触发此方法.
public void sessionCreated(IoSession session) {
System.out.println("新客户端连接");
// 当一个客端端连结进入时 @Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println("第 " + count + " 个 client 登陆!address: : "
+ session.getRemoteAddress());
// 当客户端发送的消息到达时:
public void messageReceived(IoSession session, Object message)
throws Exception {
// // 我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
// String s = (String)
// // Write the received data back to remote peer
// System.out.println("收到客户机发来的消息: " + s);
// // 测试将消息回送给客户端 session.write(s+count); count++;
HimiObject ho = (HimiObject)
System.out.println(ho.getName());
ho.setName("serverHimi");
session.write(ho);
// 当信息已经传送给客户端后触发此方法.
public void messageSent(IoSession session, Object message) {
System.out.println("信息已经传送给客户端");
// 当一个客户端关闭时
public void sessionClosed(IoSession session) {
System.out.println("one Clinet Disconnect !");
// 当连接空闲时触发此方法.
public void sessionIdle(IoSession session, IdleStatus status) {
System.out.println("连接空闲");
// 当接口中其他方法抛出异常未被捕获时触发此方法
public void exceptionCaught(IoSession session, Throwable cause) {
System.out.println("其他方法抛出异常");
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
/** * @author Himi */&import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IdleStatus;import org.apache.mina.core.session.IoSession;&public class ClientMinaServerHanlder extends IoHandlerAdapter {& private int count = 0;& // 当一个新客户端连接后触发此方法. public void sessionCreated(IoSession session) { System.out.println("新客户端连接"); }& // 当一个客端端连结进入时 @Override public void sessionOpened(IoSession session) throws Exception { count++; System.out.println("第 " + count + " 个 client 登陆!address: : " + session.getRemoteAddress());& }& // 当客户端发送的消息到达时: @Override public void messageReceived(IoSession session, Object message) throws Exception { // // 我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String: // String s = (String) // // Write the received data back to remote peer // System.out.println("收到客户机发来的消息: " + s); // // 测试将消息回送给客户端 session.write(s+count); count++;& HimiObject ho = (HimiObject) message; System.out.println(ho.getName());& ho.setName("serverHimi"); session.write(ho);& }& // 当信息已经传送给客户端后触发此方法. @Override public void messageSent(IoSession session, Object message) { System.out.println("信息已经传送给客户端");& }& // 当一个客户端关闭时 @Override public void sessionClosed(IoSession session) { System.out.println("one Clinet Disconnect !"); }& // 当连接空闲时触发此方法. @Override public void sessionIdle(IoSession session, IdleStatus status) { System.out.println("连接空闲"); }& // 当接口中其他方法抛出异常未被捕获时触发此方法 @Override public void exceptionCaught(IoSession session, Throwable cause) { System.out.println("其他方法抛出异常"); }&}
本类主要是继承IoHandlerAdapter并且重写其类的一些函数,至于每个函数的作用Himi都已经在代码中加以注视;本类的作用:
此类是用以处理消息的也可说是个消息处理器,当客户端有消息传给server端的时候,或者server端传递给Client端的时候(Client端也会有个消息处理器)都会通过消息处理器进行处理。
OK,下面我们来书写server端的main函数类:
* @author Himi
import java.io.IOE
import java.net.InetSocketA
import org.apache.mina.core.filterchain.DefaultIoFilterChainB
import org.apache.mina.filter.codec.ProtocolCodecF
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecF
import org.apache.mina.transport.socket.SocketA
import org.apache.mina.transport.socket.nio.NioSocketA
public class MinaServer {
* @param args
public static void main(String[] args) {
//创建一个非阻塞的server端Socket ,用NIO
SocketAcceptor acceptor = new NioSocketAcceptor();
/*---------接收字符串---------*/
//创建一个接收数据过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//设定过滤器一行行(/r/n)的读取数据
chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory()
/*---------接收对象---------*/
//创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//设定这个过滤器将以对象为单位读取数据
ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
chain.addLast("objectFilter",filter);
//设定服务器消息处理器
acceptor.setHandler(new ClientMinaServerHanlder());
//服务器绑定的端口
int bindPort = 9988;
//绑定端口,启动服务器
acceptor.bind(new InetSocketAddress(bindPort));
} catch (IOException e) {
System.out.println("Mina Server start for error!"+bindPort);
e.printStackTrace();
System.out.println("Mina Server run done! on port:"+bindPort);
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
/** * @author Himi */&import java.io.IOException;import java.net.InetSocketAddress;&import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;import org.apache.mina.transport.socket.SocketAcceptor;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;&public class MinaServer {& /** * @param args */& public static void main(String[] args) { //创建一个非阻塞的server端Socket ,用NIO SocketAcceptor acceptor = new NioSocketAcceptor();& /*---------接收字符串---------*/// //创建一个接收数据过滤器// DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();// //设定过滤器一行行(/r/n)的读取数据// chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory()&& )); /*---------接收对象---------*/ //创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定这个过滤器将以对象为单位读取数据 ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory()); chain.addLast("objectFilter",filter);& //设定服务器消息处理器 acceptor.setHandler(new ClientMinaServerHanlder()); //服务器绑定的端口 int bindPort = 9988; //绑定端口,启动服务器 try { acceptor.bind(new InetSocketAddress(bindPort)); } catch (IOException e) { System.out.println("Mina Server start for error!"+bindPort); e.printStackTrace(); } System.out.println("Mina Server run done! on port:"+bindPort); }}
IoService 是负责底层通讯接入,而 IoHandler 是负责业务处理的。那么 MINA 架构图中的 IoFilter 作何用途呢?答案是你想作何用途都可以。但是有一个用途却是必须的,那就是作为 IoService 和 IoHandler 之间的桥梁。IoHandler 接口中最重要的一个方法是 messageReceived,这个方法的第二个参数是一个 Object 型的消息,总所周知,Object 是所有 Java 对象的基础,那到底谁来决定这个消息到底是什么类型呢?这个取决于我们后面设定的过滤器!
对于在mina中建立一个server,步骤如下:
1. 建立一个SockerAcceptor ,除了启动server之外它还可以为我们可以生成过滤器DefaultIoFilterChainBuilder、设置消息处理器等功能;
2.设置过滤器
3. 设置消息处理器
其实很容易不是么? 哈哈;
OK,这里多说一些:
对于消息处理器 DefaultIoFilterChainBuilder,它的作用是用于设定收发的形式,例如:
//创建一个接收数据过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//设定过滤器一行行(/r/n)的读取数据
chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory()
//创建一个接收数据过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定过滤器一行行(/r/n)的读取数据 chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory()&& ));
这样设置一个过滤器作用是将来自客户端输入的信息转换成一行行的文本后传递给 IoHandler,因此我们可以在 messageReceived 中直接将 msg 对象强制转换成 String 对象。
ps.而如果我们不提供任何过滤器的话,那么在 messageReceived 方法中的第二个参数类型就是一个 byte 的缓冲区,对应的类是 org.mon.ByteBuffer。虽然你也可以将解析客户端信息放在 IoHandler 中来做,但这并不是推荐的做法,使原来清晰的模型又模糊起来,变得 IoHandler 不只是业务处理,还得充当协议解析的任务。
mina自身带有一些常用的过滤器,例如LoggingFilter(日志记录)、BlackListFilter(黑名单过滤)、CompressionFilter(压缩)、SSLFilter(SSL加密)等。
当我们设置如下:
//创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//设定这个过滤器将以对象为单位读取数据
ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
chain.addLast("objectFilter",filter);
//创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定这个过滤器将以对象为单位读取数据 ProtocolCodecFilter filter= new ProtocolCodecFilter(new ObjectSerializationCodecFactory()); chain.addLast("objectFilter",filter);
这样以来我们server可以收发Object对象啦;
acceptor.setHandler(new ClientMinaServerHanlder());
acceptor.setHandler(new ClientMinaServerHanlder());
这里是设置消息处理器,绑定在我们的ClientMinaServerHanlder类上,其实mina对于收发处理已经完全交给开发者来进行处理,所以至于在消息处理器如何编写和处理就放任不会管了;
OK,现在我们可以run一下启动server端了;
当然我们现在也可以来测试了,当前我们还没有书写Client端的代码,所以我们使用terminal终端进行测试,OK,打开你的terminal
telnet localhost 9988
观察服务器打印:
OK,没有任何问题;但是这时候大家不要在终端书写内容给server,因为我们server的消息处理器中的接受Client的函数中做了如下处理:
// 当客户端发送的消息到达时:
public void messageReceived(IoSession session, Object message)
throws Exception {
// // 我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String:
// String s = (String)
// // Write the received data back to remote peer
// System.out.println("收到客户机发来的消息: " + s);
// // 测试将消息回送给客户端 session.write(s+count); count++;
HimiObject ho = (HimiObject)
System.out.println(ho.getName());
ho.setName("serverHimi");
session.write(ho);
1234567891011121314151617
// 当客户端发送的消息到达时: @Override public void messageReceived(IoSession session, Object message) throws Exception { // // 我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为String: // String s = (String) // // Write the received data back to remote peer // System.out.println("收到客户机发来的消息: " + s); // // 测试将消息回送给客户端 session.write(s+count); count++;& HimiObject ho = (HimiObject) message; System.out.println(ho.getName());& ho.setName("serverHimi"); session.write(ho);& }
Himi这里server处理client端发来的数据处理函数(如上代码)中,当Client发送数据过来的时候,将消息message强制转换成了一个HimiObject对象,然后改个name重写发给Client端,但是由于Client端是使用终端模拟登陆根本无法接受这个对象,所以会出异常;
但是到这里大家应该懂得,HimiObject类的作用了;哈哈
下面我们来书写Client客户端,对于建立一个Client端,其实步骤雷同,步骤如下:
1 . 建立一个NioSocketConnector对象;
2. 设定过滤器
3. 设定消息处理器
代码如下:
* @author Himi
import java.net.InetSocketA
import org.apache.mina.core.filterchain.DefaultIoFilterChainB
import org.apache.mina.core.future.ConnectF
import org.apache.mina.filter.codec.ProtocolCodecF
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecF
import org.apache.mina.transport.socket.nio.NioSocketC
public class MainClient {
public static void main(String[] args) {
// 创建一个tcp/ip 连接
NioSocketConnector connector = new NioSocketConnector();
/*---------接收字符串---------*/
// //创建接收数据的过滤器
// DefaultIoFilterChainBuilder chain = connector.getFilterChain();
// // 设定这个过滤器将一行一行(/r/n)的读取数据
// chain.addLast("myChin", new ProtocolCodecFilter(
// new TextLineCodecFactory()));
/*---------接收对象---------*/
// 创建接收数据的过滤器
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
// 设定这个过滤器将以对象为单位读取数据
ProtocolCodecFilter filter = new ProtocolCodecFilter(
new ObjectSerializationCodecFactory());
// 设定服务器端的消息处理器:一个SamplMinaServerHandler对象,
chain.addLast("objectFilter",filter);
// 设定服务器端的消息处理器:一个 SamplMinaServerHandler 对象,
connector.setHandler(new ClientMinaServerHanlder());
// Set connect timeout.
connector.setConnectTimeoutCheckInterval(30);
// 连结到服务器:
ConnectFuture cf = connector.connect(new InetSocketAddress("localhost",
// Wait for the connection attempt to be finished.
cf.awaitUninterruptibly();
cf.getSession().getCloseFuture().awaitUninterruptibly();
connector.dispose();
123456789101112131415161718192021222324252627282930313233343536373839404142434445
/** * @author Himi */import java.net.InetSocketAddress;&import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;import org.apache.mina.transport.socket.nio.NioSocketConnector;&public class MainClient { public static void main(String[] args) { // 创建一个tcp/ip 连接 NioSocketConnector connector = new NioSocketConnector();& /*---------接收字符串---------*/ // //创建接收数据的过滤器 // DefaultIoFilterChainBuilder chain = connector.getFilterChain(); // // 设定这个过滤器将一行一行(/r/n)的读取数据 // chain.addLast("myChin", new ProtocolCodecFilter( // new TextLineCodecFactory())); /*---------接收对象---------*/ // 创建接收数据的过滤器 DefaultIoFilterChainBuilder chain = connector.getFilterChain(); // 设定这个过滤器将以对象为单位读取数据 ProtocolCodecFilter filter = new ProtocolCodecFilter( new ObjectSerializationCodecFactory()); // 设定服务器端的消息处理器:一个SamplMinaServerHandler对象, chain.addLast("objectFilter",filter);& // 设定服务器端的消息处理器:一个 SamplMinaServerHandler 对象, connector.setHandler(new ClientMinaServerHanlder()); // Set connect timeout. connector.setConnectTimeoutCheckInterval(30); // 连结到服务器: ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988)); // Wait for the connection attempt to be finished. cf.awaitUninterruptibly(); cf.getSession().getCloseFuture().awaitUninterruptibly(); connector.dispose();& }}
不多说了,很eazy:那么我们继续看Clent端的消息处理器以及HimiObject:
ClentMinaServerHanlder:
* @author Himi
import org.apache.mina.core.service.IoHandlerA
import org.apache.mina.core.session.IoS
public class ClientMinaServerHanlder extends IoHandlerAdapter {
// 当一个客端端连结到服务器后
public void sessionOpened(IoSession session) throws Exception {
session.write("我来啦........");
HimiObject ho = new HimiObject(1,"Himi");
session.write(ho);
// 当一个客户端关闭时
public void sessionClosed(IoSession session) {
System.out.println("I'm Client &&
I closed!");
// 当服务器端发送的消息到达时:
public void messageReceived(IoSession session, Object message)
throws Exception {
// 我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为 String:
String s = (String)
// Write the received data back to remote peer
System.out.println("服务器发来的收到消息: " + s);
// 测试将消息回送给客户端 session.write(s);
HimiObject ho = (HimiObject)
System.out.println(ho.getName());
12345678910111213141516171819202122232425262728293031323334353637
/** * @author Himi */&import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;&public class ClientMinaServerHanlder extends IoHandlerAdapter { // 当一个客端端连结到服务器后 @Override public void sessionOpened(IoSession session) throws Exception {// session.write("我来啦........"); HimiObject ho = new HimiObject(1,"Himi"); session.write(ho); }& // 当一个客户端关闭时 @Override public void sessionClosed(IoSession session) { System.out.println("I'm Client &&&&I closed!"); }& // 当服务器端发送的消息到达时: @Override public void messageReceived(IoSession session, Object message) throws Exception {// // 我们己设定了服务器解析消息的规则是一行一行读取,这里就可转为 String:// String s = (String)// // Write the received data back to remote peer// System.out.println("服务器发来的收到消息: " + s);// // 测试将消息回送给客户端 session.write(s);& HimiObject ho = (HimiObject) message; System.out.println(ho.getName());& }}
Client的HimiObject与服务器Server的HimiObejct类一模一样!
可能有童鞋不理解为什么server端与client的HimiObject一模一样,这里Himi说下,通过Client端的消息处理器可以看出,当我们Client端连接到服务器后,首先会写给Server端一个HimiObject对象!那么服务器之前说过了,接受到Client端的消息后首先将消息强制转换成HimiObject对象然后处理;
既然Client端发的是Object,那么当然我们的服务器也要有对应的此Object对象才可以,否则如何获取这个Object?
大家应该很容易理解;
OK,不多说直接运行Client端,观察结果:
OK,结果正常。
Client与Server消息逻辑如下:
1. Client-&传递HimiObject给Server
2. Server端接受message强制转换HimiObject,并且设置其name为serverHimi,然后再传递给Client
3. 客户端接受message强制转换HimiObject,然后获取此类的name打印出来!
微信扫一扫,打赏作者吧~
街区小告示
技术开发交流群
? 【Unreal Engine】
? 【React Native】
? 【Cocos Creator】
? 【Cocos2dx】
? 【C2dx_Lua】
总有你想找的
小广告先森
小广告先森

我要回帖

更多关于 netty im框架搭建 的文章

 

随机推荐