Java socket 一个服务端对多个客户端 的多线程并发

时间:2021-04-29 22:15:56
现在有个需求就是一个服务端管理多个客户端,每个客户端都是要定时向服务端发送报文,即心跳信息。=,那么如何在服务端实现每个客户端对应?就是怎么判断哪个客户端没有保持长连接?还有就是服务端也要求能在长连接的情况下向指定的客户端发送消息,也可以向全部客户端发送消息。需要如何实现?服务端也要求能对客户端的请求进行并发处理。新人刚接触socket编程,实在不会,请各位大虾指教啊,谢谢啦~~~~~~再做不出来,就要被辞掉的节奏了····

8 个解决方案

#1


我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

#2


关于你的多线程并发的,我太菜没怎么接触,我是简单的创建一个线程池,然后把每条socket放进线程池里面,然后判断连接是否维持着,这个当你从服务端发送失败的时候,将该连接从map移除然后返回信息就行

#3


本人太菜,坐等大神方案

#4


引用 1 楼 ITjavaman 的回复:
我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

#5


引用 4 楼 u010107350 的回复:
Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

#6


引用 5 楼 ITjavaman 的回复:
Quote: 引用 4 楼 u010107350 的回复:

Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

这是安卓的啊,源码感觉比较乱啊

#7


引用 6 楼 u010107350 的回复:
Quote: 引用 5 楼 ITjavaman 的回复:

Quote: 引用 4 楼 u010107350 的回复:

Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

这是安卓的啊,源码感觉比较乱啊

里面有服务端,就算你是电脑客户端,原理是一样的。

#8


引用 7 楼 ITjavaman 的回复:
Quote: 引用 6 楼 u010107350 的回复:

Quote: 引用 5 楼 ITjavaman 的回复:

Quote: 引用 4 楼 u010107350 的回复:

Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

这是安卓的啊,源码感觉比较乱啊

里面有服务端,就算你是电脑客户端,原理是一样的。

好的,谢谢了啊~~~~

#1


我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

#2


关于你的多线程并发的,我太菜没怎么接触,我是简单的创建一个线程池,然后把每条socket放进线程池里面,然后判断连接是否维持着,这个当你从服务端发送失败的时候,将该连接从map移除然后返回信息就行

#3


本人太菜,坐等大神方案

#4


引用 1 楼 ITjavaman 的回复:
我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

#5


引用 4 楼 u010107350 的回复:
Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

#6


引用 5 楼 ITjavaman 的回复:
Quote: 引用 4 楼 u010107350 的回复:

Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

这是安卓的啊,源码感觉比较乱啊

#7


引用 6 楼 u010107350 的回复:
Quote: 引用 5 楼 ITjavaman 的回复:

Quote: 引用 4 楼 u010107350 的回复:

Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

这是安卓的啊,源码感觉比较乱啊

里面有服务端,就算你是电脑客户端,原理是一样的。

#8


引用 7 楼 ITjavaman 的回复:
Quote: 引用 6 楼 u010107350 的回复:

Quote: 引用 5 楼 ITjavaman 的回复:

Quote: 引用 4 楼 u010107350 的回复:

Quote: 引用 1 楼 ITjavaman 的回复:

我做过一个简单的,思想是这样的,你服务端死循环启动一个接收的socket,一旦客户端连接上就把该连接封装进一个map里面Map<key,socket>,这个map是一个全局的,当你需要做什么操作再从这个map取出来

我是每次连接都放到一个HashMap里面,但是后面的怎么保持心跳和怎么放进线程池或者队列里面处理,我就不懂了。可否给你的源码我参考一下啊?我邮箱是343355247@qq.com 谢谢啦!!

源码    
当时我是仿照这里的

这是安卓的啊,源码感觉比较乱啊

里面有服务端,就算你是电脑客户端,原理是一样的。

好的,谢谢了啊~~~~