想制作一款 ios 网游,服务器端采用 java mina 搭建,客户端使用 cocos2d-x,但是在做技术调研的时候遇到了一个问题,花了好几天的时间都没有解决。
具体是这样的:
mina 端的 filter 如果是用的是 TextLine,倒是不存在问题,mina 服务器和 c++ 客户端都能进行正常的通讯(TextLine 这里比较容易,只要将发送字符串消息的后面跟上 \n 就没问题了)。
同样的,如果是 mina 的服务器 + mina 的客户端,服务器和客户端的 filter 都使用 ObjectSerialization... 的时候,服务器和客户端以 byte[] 为单元进行通讯也没有问题。
诡异的,如果是 mina 的服务器 + cpp 的客户端,服务器和客户端的 filter 都是用 ObjectSerialization...
的时候,cpp 客户端向 mina 服务器端用 bsd socket 以 tcp 链接的形式发送 char[] 数据的时候,mina 服务器端 handler 的 messageReceived 方法不响应了(客户端能够连接到服务器端,但是服务器端收不到 char[] 数据)。
难为了很久,也做了很多测试,譬如:
将 filter 统统去掉(其实也就是一个 ObjectSerialization... filter),情况发生了变化,
服务器端 handler 的 messageReceivde 方法能响应了,但收到的 message 对象打印出来是一个 HeapBuffer 对象。
这里我的疑问是:
1.c++ 端以 bsd send 方法发送过来的 char[] 数据怎么就没法触发 messageReceived 方法?
2.这个 HeapBuffer 的解码器到底应该怎么来写(将 HeapBuffer 转换为 byte[])?
3.单服 2000~3000 人的 SLG 类型游戏(ios 网游 Clash of Clans,pc 端的页游黄金国度),客户端和服务器端的通讯应该使用 tcp 还是 udp 来做?
就问这么多吧,希望路过的有经验的大神能指点一下迷津,感激不尽!
mina?c++?socket
------解决方案--------------------
一切秘密都在mina的源代码里,打开看一下吧.