我有一台服务器,运行用c#写的程序通过串口连接设备实时采集数据。
我希望从其他任何电脑利用客户端程序实时动态的显示服务器上采集的数据。
如果用数据库实现的话,客户端程序不方便判断哪些数据是新数据,而且效率也很低。
于是想用Socket实现。本人小白啦,对Socket只是有耳闻而已。
在网上查了查资料,好像基本上就是两种模式。
1.Socket广播。 我的理解就是服务器向网内广播地址发送一条消息,路由器会在网内自动转发。网内的客户端被动的接收消息,刷新数据就可以了。
2.服务器打开并监听端口,被动接收客户端的请求,再响应。
但是第一种的做法,我担心当数据采集频率较高,或未来有多台以此种方式实现的服务器时,大量的广播信息会不会对网络造成负担。而且我们公司的内网是多个网段,用多台三层交换机连接到一起的。虽然IP互相都能Ping通,但是不知道广播数据能否转发到其他网段。而且广播貌似用UDP协议,看网上的解释,好像这种协议不能保证数据的先后,但我需要客户端就像心电图一样,显示一个连续的波形。第二种做法的话,需要客户端不停的发送请求,当客户端请求的频率和数据采集的频率不一致时,服务器端还要考虑是否已给给此客户端发送过最新的数据。而且当客户端数量较多的时候,会不会对服务器端程序造成压力,影响数据采集进程。
我理想的模式就是,服务器采集到数据之后,直接将数据发送到某个端口。客户端监听服务器的端口,当服务器端口数据有变化时,就将数据获取并显示出来。
看起来和上面第一种模式有些类似。但是我不希望广播,是通过客户端监听实现。