a**********0 发帖数: 422 | 1 server side: 同一个port number下只有一个socket吧 那如果有许多client 则需要
很多socket 也就是很多port number 每个client分配一个socket/port number 但问题
是client需要事先知道自己的port number才可以建立一个socket去跟server通信 可是
如果没有socket 则server无法把client分配到的port number发给client
有一种解决办法是server定义一个公用的port number 作为constant server开一个
socket来服务所有client的connections
所有的client都使用这一个port number 但是多个client难道同时公用这个socket?
我的理解是同一个ServerSocket同时只能handle来自一个client的connection啊 |
Q**F 发帖数: 995 | 2 ?难道不是把这个port收到的request根据一些request里面的信息,传到后面相应的
thread pool或者service group? |
a**********0 发帖数: 422 | 3 你说的对
但是理论上可以开的socket数目为port的数目 也就是64k 如我我想同时为这64k的连接
提供服务 难道要开64k的threads吗? 这样并不scalable
【在 Q**F 的大作中提到】 : ?难道不是把这个port收到的request根据一些request里面的信息,传到后面相应的 : thread pool或者service group?
|
a**********0 发帖数: 422 | 4 而且这是一个聊天系统
假设我们最多开50个threads 每个thread负责一个socket/client
那最多五十个人聊天 而且他们如果每个人聊一个小时 就要占用那个thread一个小时
其他人就需要等待thread pool的free thread
现实的聊天工具是啥时候想聊就聊 不会让用户等待的 最多是首发消息延迟大一点
有一种办法就是用时间间隔比较小的异步通信方式 每个人每发完一个消息就向数据库
存他发的消息内容 同时掐断他的那个thread 和 socket 和他聊天的人享用同一个
channel id 数据库的表有userid和channel id 下次这个人需要再次发消息或者收消息
就要再次request to ServerSocket 然后得到了就用新socket通信
不过这都是我自己瞎想的 真实系统和这个差距大吗
【在 a**********0 的大作中提到】 : 你说的对 : 但是理论上可以开的socket数目为port的数目 也就是64k 如我我想同时为这64k的连接 : 提供服务 难道要开64k的threads吗? 这样并不scalable
|
Q**F 发帖数: 995 | 5 用nodejs可以解决这个问题吧。用户持续用一小时,并不是每一秒每一毫秒都在发信息
啊。这就是信息传送。nodejs每一秒可以处理成千上万条request,然后根据request的
信息传到后台的特定的service group,这些service group根据目标地址把消息送到另
外一头用户就是了。 |
a**********0 发帖数: 422 | 6 请问不用架构而自己用最基本的java写 如何处理每秒钟上万个request呢 其实还是
sequential处理request 然后发给thread pool处理 每个thread收发一条消息就去服务
另一个request 而不让一个用户长期占有吧
:用nodejs可以解决这个问题吧。用户持续用一小时,并不是每一秒每一毫秒都在发信
息啊。这就是信息传送。nodejs每一秒可以处理成千上万条request,然后根据request
的信息传到后台的特定的service group,这些service group根据目标地址把消息送到
另外一头用户就是了。
【在 Q**F 的大作中提到】 : 用nodejs可以解决这个问题吧。用户持续用一小时,并不是每一秒每一毫秒都在发信息 : 啊。这就是信息传送。nodejs每一秒可以处理成千上万条request,然后根据request的 : 信息传到后台的特定的service group,这些service group根据目标地址把消息送到另 : 外一头用户就是了。
|
Q**F 发帖数: 995 | 7 我们做的系统没有这么大需求,大概几百每秒。我们一般开150到200 threads,足够应
付了。
至鱼每秒上万了,出了每个机器的配置要强大一些,机器也要多一些应该可以处理吧
request
【在 a**********0 的大作中提到】 : 请问不用架构而自己用最基本的java写 如何处理每秒钟上万个request呢 其实还是 : sequential处理request 然后发给thread pool处理 每个thread收发一条消息就去服务 : 另一个request 而不让一个用户长期占有吧 : : :用nodejs可以解决这个问题吧。用户持续用一小时,并不是每一秒每一毫秒都在发信 : 息啊。这就是信息传送。nodejs每一秒可以处理成千上万条request,然后根据request : 的信息传到后台的特定的service group,这些service group根据目标地址把消息送到 : 另外一头用户就是了。
|
a*********0 发帖数: 2727 | |
s*********n 发帖数: 35 | 9 server socket一个端口可以连无数个连接,取决于OS的限制,实际production中几十
万长连接也不稀奇。 一个unique连接是靠两侧的ip和port来标识的,不存在你说的问
题。
【在 a**********0 的大作中提到】 : server side: 同一个port number下只有一个socket吧 那如果有许多client 则需要 : 很多socket 也就是很多port number 每个client分配一个socket/port number 但问题 : 是client需要事先知道自己的port number才可以建立一个socket去跟server通信 可是 : 如果没有socket 则server无法把client分配到的port number发给client : 有一种解决办法是server定义一个公用的port number 作为constant server开一个 : socket来服务所有client的connections : 所有的client都使用这一个port number 但是多个client难道同时公用这个socket? : 我的理解是同一个ServerSocket同时只能handle来自一个client的connection啊
|
u***n 发帖数: 21026 | 10 为什么要自己写,直接用Topic subcriber不就可以了 |
E****l 发帖数: 21 | 11 Java new IO, you don't have to have one thread for each socket connection.
you can take a look at Websocket, you don't need a unique port number for
each client.
request
【在 a**********0 的大作中提到】 : 请问不用架构而自己用最基本的java写 如何处理每秒钟上万个request呢 其实还是 : sequential处理request 然后发给thread pool处理 每个thread收发一条消息就去服务 : 另一个request 而不让一个用户长期占有吧 : : :用nodejs可以解决这个问题吧。用户持续用一小时,并不是每一秒每一毫秒都在发信 : 息啊。这就是信息传送。nodejs每一秒可以处理成千上万条request,然后根据request : 的信息传到后台的特定的service group,这些service group根据目标地址把消息送到 : 另外一头用户就是了。
|