[问题] Socket server 资料处理问题

楼主: jack77102020 (哈哈龙)   2015-09-05 17:16:34
各位前辈好,想请教关于Server以及data处理的问题。
目前我想做的事情是建立一个Server供多个Client连线并且进行不间断的data传递。
收到data后解析封包并将资讯显示在Form的listbox上。
我现阶段的架构是使用MVC,Form里有一个Form controller。Controller内部包含一个
Server。
Server是以同步和多执行绪来实做。每个连进来的client都是一个执行绪在处理receive
后的资料。server还有收到data的event供controller观察,以及n个queue来存放n个
client传来的heartbeat。
Server收到data后会解析类型并且读取需要的长度存入byte[]。接着利用事件invoke
将此byte[]传出给controller。controller将此byte[]处理后保存至内存。并且也
invoke事件让form去更新UI画面。而若是收到heartbeat则加入该对应的queue中。
由server内部自己一条背景执行绪来回应。
每个Client传递给Server的资料量约是2MB/s。目前遇到的问题是当client变多时,
heartbeat回应给client的时间间隔就会越来越长。最终导致client端timeout而断线。
若无heartbeat机制也会因为server端的buffer越积越多而爆掉。
是否因为我在server就将资料分析并且每取得一笔资料都invoke一次而导致处理慢了?
有想过是否要将server端receive出来的资料直接丢给controller去处理就好,但这样
会不会变成是controller中的buffer爆掉?
这是第一次做server和client的东西,不知道该如何做会比较好。希望前辈能指点一下。
如果叙述很难理解需要我的程式码,我也可以贴出来,非常感谢!
作者: Litfal (Litfal)   2015-09-05 18:24:00
请在server中测量接受到回传总共需要的时间
作者: fo40225   2015-09-05 21:01:00
有没有考虑用SignalR 这样不用自己重新发明轮子如果要自己刻的话 要用异步 IIS的执行绪才不会卡住
作者: Litfal (Litfal)   2015-09-05 21:59:00
除非你的server要主动通知client,不然我觉得用http就好了
楼主: jack77102020 (哈哈龙)   2015-09-10 23:49:00
感谢各位,后来我用了异步server以及异步invoke后就改善了,Litfal你好,我也需要主动发data给client,所以还是用了socket。另外我查了一下SignalR和IIS好像是网页用的东西?我是用windows form也行吗
作者: fo40225   2015-09-12 21:31:00
http://tinyurl.com/q8hppuewinform也可以用
楼主: jack77102020 (哈哈龙)   2015-09-13 11:07:00
感谢您,我再研究一下

Links booklink

Contact Us: admin [ a t ] ucptt.com