各位前辈好,想请教关于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的东西,不知道该如何做会比较好。希望前辈能指点一下。
如果叙述很难理解需要我的程式码,我也可以贴出来,非常感谢!