关于 java socket的消息推送问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 java socket的消息推送问题相关的知识,希望对你有一定的参考价值。
是这样,后台管理员添加了一条社区消息,需要推送的用户的安卓客户端,然后我在做socket的时候是手机端链接服务端的时候开了一个线程保持了链接,假如现在有很多手机端开了线程,我怎么操作这些线程在后台管理员添加消息的时候去推送消息呢
关于 java socket的消息推送问题,首先:开启服务端,并暴露出端口。然后通过一个while的死循环去不停的接收来自客户端的socket,并且通过一个ArrayList来维护。并且通过子线程去对list中的socket进行操作。其次:客户端去访问服务器的端口。开启一个子线程去不停的接收来自服务端的消息。
然而关于推送服务的更多内容,可以通过深圳极光公司了解一下。深圳市和讯华谷信息技术有限公司(极光 Aurora Mobile)成立于2011年,是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。
同时,极光的行业应用已经拓展至市场洞察、金融风控与商业地理服务,助力各行各业优化决策、提升效率。
参考技术A
使用线程池会比较好。方便管理。你也要对链接的线程做一个限制,无限的链接创建线程会耗尽内存的。比如:
class NetworkService implements Runnableprivate final ServerSocket serverSocket;
private final ExecutorService pool;
public NetworkService(int port, int poolSize)
throws IOException
serverSocket = new ServerSocket(port);
pool = Executors.newFixedThreadPool(poolSize);
public void run() // run the service
try
for (;;)
pool.execute(new Handler(serverSocket.accept()));
catch (IOException ex)
pool.shutdown();
class Handler implements Runnable
private final Socket socket;
Handler(Socket socket) this.socket = socket;
public void run()
// read and service request on socket
在没有消息的时候,线程要处于wait状态,当有消息的时候,用notify来激活。
追问大神,就是后台管理员添加了这个社区消息,我怎么操作线程池里面的这些线程去执行推送呢
追答消息放到一个消息队列中,你可以简单的用ArrayList<String> messageQueue。线程只需要负责去读取信息就可以了。
// 发送线程
synchrnozed (messageQueue)if (messageQueue.size() == 0)
messageQueue.wait();
else
// send message
// 消息线程
messageQueue.notifyAll();
追问
没懂..
追答就是说推送消息的线程是一直在运作的,不是一个有消息,你去触发线程推送。而是线程一直在运行,检测是否有新的消息存在。如果有了,线程就把消息发送出去了。如果没有,那就继续等待。直到新消息有了,再被激活。你可以去看下thread的wait和notify机制。
追问哦哦,谢谢大神
追答我再举个更加形象点的例子。物流配送的时候,快递员们都驻扎在配送基地,比如有10个配送员。货物从上海出发,运到杭州,中间消耗2小时。这个期间,配送员们没事干,全部在物流中心大牌。等到货物到了,配送员有货了,就出发了。送完之后又回到基地等货物,没有就继续大牌。这样持续下去。
本回答被提问者采纳 参考技术B 你看web socket的时候没发现页面都是要求html5吗,这个适用性当前环境下不强,而且这方面的具体应用其实不多,使用ajax刷新简单方便,兼容性也好,基本上满足一般的需求。关于使用PHP socket.io 做消息推送服务
1、确保已安装redis拓展,可使用php -v 进行查看。如没有安装拓展请参考linux下安装redis扩展。
2、下载文档 https://github.com/Lijianeng10/socket-
3、具体使用方法参考官方文档 https://github.com/walkor/phpsocket.io/tree/master/docs/zh
4、$sender_io = new SocketIO(2120); 此种声明方式需在SocketIO.php 文件中设置IP地址。
表示开启了服务器的 8090 socket监听端口
5、客户端开始连接服务端
以上是关于关于 java socket的消息推送问题的主要内容,如果未能解决你的问题,请参考以下文章