关于 java socket的消息推送问题
是这样,后台管理员添加了一条社区消息,需要推送的用户的安卓客户端,然后我在做socket的时候是手机端链接服务端的时候开了一个线程保持了链接,假如现在有很多手机端开了线程...
是这样,后台管理员添加了一条社区消息,需要推送的用户的安卓客户端,然后我在做socket的时候是手机端链接服务端的时候开了一个线程保持了链接,假如现在有很多手机端开了线程,我怎么操作这些线程在后台管理员添加消息的时候去推送消息呢
展开
展开全部
关于 java socket的消息推送问题,首先:开启服务端,并暴露出端口。然后通过一个while的死循环去不停的接收来自客户端的socket,并且通过一个ArrayList来维护。并且通过子线程去对list中的socket进行操作。
其次:客户端去访问服务器的端口。开启一个子线程去不停的接收来自服务端的消息。
然而关于推送服务的更多内容,可以通过深圳极光公司了解一下。深圳市和讯华谷信息技术有限公司(极光 Aurora Mobile)成立于2011年,是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。
同时,极光的行业应用已经拓展至市场洞察、金融风控与商业地理服务,助力各行各业优化决策、提升效率。
其次:客户端去访问服务器的端口。开启一个子线程去不停的接收来自服务端的消息。
然而关于推送服务的更多内容,可以通过深圳极光公司了解一下。深圳市和讯华谷信息技术有限公司(极光 Aurora Mobile)成立于2011年,是中国领先的开发者服务提供商,专注于为开发者提供稳定高效的消息推送、一键认证以及流量变现等服务,助力开发者的运营、增长与变现。
同时,极光的行业应用已经拓展至市场洞察、金融风控与商业地理服务,助力各行各业优化决策、提升效率。
展开全部
使用线程池会比较好。方便管理。你也要对链接的线程做一个限制,无限的链接创建线程会耗尽内存的。比如:
class NetworkService implements Runnable {
private 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
}
}
// 消息线程
synchrnozed (messageQueue) { messageQueue.add(msg);
messageQueue.notifyAll();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你看web socket的时候没发现页面都是要求html5吗,这个适用性当前环境下不强,而且这方面的具体应用其实不多,使用ajax刷新简单方便,兼容性也好,基本上满足一般的需求。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询