现在流行的消息推送机制是怎么实现的?

小牛毛 2013-10-19 12:46:41
现在那些消息推送机制是怎么实现的?象现在的微信和QQzone ?
怎么让web服务器向指定的用户发送消息呢??跟以前的邮件系统是不是有点类似?
...全文
58277 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
闾丘 2016-05-14
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
你只要登录,就会向服务器发送一个请求。这个请求就是你的信息 包括IP以及其他信息,有了这个,服务器向你发送信息很简单吧啊。
好像你这么做是的
DDPush 2014-11-12
  • 打赏
  • 举报
回复
可以试试国内开源的DDPush任意门推送,java开源项目,同时支持tcp长连接和udp,其中udp方式单机可支持千万级在线
小牛毛 2013-11-02
  • 打赏
  • 举报
回复
引用 13 楼 s478853630 的回复:
用Socket吧,
package com.zl;

import java.net.ServerSocket;
import java.net.Socket;
import org.apache.commons.mvc.util.FileUtil;

public class TestSocket {

	public static void main(String[] args) {
		new ServerThread().start();
	}

}

//创建一个线程在后台监听
class ServerThread extends Thread {
	
	public void run() {
		ServerSocket serversocket = null;
		try {
			serversocket = new ServerSocket(10000);// 创建一个serversocket对象,并让他在Port端口监听
			while (true) {
				Socket socket = serversocket.accept();// 接收客户端发送的请求
				System.out.println(FileUtil.readFile(socket.getInputStream(), null, 1, false));
				socket.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				serversocket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}
package com.zl;

import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class Test {
	
	public static void main(String[] args) throws Exception {
		socket();
	}

	public static void socket() {
		try {
			Socket socket = new Socket("192.168.1.58", 10000);// 创建socket对象,指定服务器端地址和端口号
			OutputStream output = socket.getOutputStream();
			PrintWriter out = new PrintWriter(output, true);// 获取 Client 端的输出流
			out.print("发送信息内容");// 填充信息
			out.flush();out.close();
			output.flush();output.close();
			socket.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
谢谢!
s478853630 2013-11-01
  • 打赏
  • 举报
回复
用Socket吧,
package com.zl;

import java.net.ServerSocket;
import java.net.Socket;
import org.apache.commons.mvc.util.FileUtil;

public class TestSocket {

	public static void main(String[] args) {
		new ServerThread().start();
	}

}

//创建一个线程在后台监听
class ServerThread extends Thread {
	
	public void run() {
		ServerSocket serversocket = null;
		try {
			serversocket = new ServerSocket(10000);// 创建一个serversocket对象,并让他在Port端口监听
			while (true) {
				Socket socket = serversocket.accept();// 接收客户端发送的请求
				System.out.println(FileUtil.readFile(socket.getInputStream(), null, 1, false));
				socket.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				serversocket.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}
package com.zl;

import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class Test {
	
	public static void main(String[] args) throws Exception {
		socket();
	}

	public static void socket() {
		try {
			Socket socket = new Socket("192.168.1.58", 10000);// 创建socket对象,指定服务器端地址和端口号
			OutputStream output = socket.getOutputStream();
			PrintWriter out = new PrintWriter(output, true);// 获取 Client 端的输出流
			out.print("发送信息内容");// 填充信息
			out.flush();out.close();
			output.flush();output.close();
			socket.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
sunbo624 2013-11-01
  • 打赏
  • 举报
回复
web推送就是你发一条请求 服务器接收以后处理返回 你收到返回的数据以后处理 然后再发 一直这样循环着
oO归去来兮Oo 2013-11-01
  • 打赏
  • 举报
回复
用dwr实现推送http://blog.csdn.net/is_zhoufeng/article/details/7641234
最勇敢的鸟 2013-10-20
  • 打赏
  • 举报
回复
是的,长连接推送信息就容易了,但http的话恐怕只能轮寻
失落夏天 2013-10-20
  • 打赏
  • 举报
回复
引用 8 楼 yinqianhui1990 的回复:
[quote=引用 1 楼 AA5279AA 的回复:] 你只要登录,就会向服务器发送一个请求。这个请求就是你的信息 包括IP以及其他信息,有了这个,服务器向你发送信息很简单吧啊。
没请求怎么发?[/quote] 谁说非得有请求才能发送呢? 你用web用的太多了,思维都定式了,web就是封装了socket通信,给予每一个请求一次响应。 如果单单用socket的话,没请求一样可以发送消息的
小牛毛 2013-10-20
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
你只要登录,就会向服务器发送一个请求。这个请求就是你的信息 包括IP以及其他信息,有了这个,服务器向你发送信息很简单吧啊。
没请求怎么发?
小牛毛 2013-10-20
  • 打赏
  • 举报
回复
引用 4 楼 Inhibitory 的回复:
现在 Server Push 的技术运用还是很少,基本都是向 Server 定时轮询。
轮训的话对于那种即时消息可能比较麻烦。。。。频率估计会比较高。。。
小牛毛 2013-10-20
  • 打赏
  • 举报
回复
引用 5 楼 huxiweng 的回复:
你要知道HTTP协议的两个特性: 1、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 2、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 所以回答你的问题,表象的推送其实是客户端定时请求服务器的。 但是微信什么的APP这样的,APP是有一套推送机制的和WEB这样的是有区别的
那看来做web推送还是比较麻烦了,定时请求对于那种需要及时获取消息的那不得时时刻刻都请求啊,。。。这样服务器可能会崩溃。。。。
teemai 2013-10-19
  • 打赏
  • 举报
回复
你要知道HTTP协议的两个特性: 1、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 2、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。 所以回答你的问题,表象的推送其实是客户端定时请求服务器的。 但是微信什么的APP这样的,APP是有一套推送机制的和WEB这样的是有区别的
Inhibitory 2013-10-19
  • 打赏
  • 举报
回复
现在 Server Push 的技术运用还是很少,基本都是向 Server 定时轮询。
呆呆天河 2013-10-19
  • 打赏
  • 举报
回复
定时请求,html5 websocket ,在网页里嵌入插件,我知道的有这几种
funnyone 2013-10-19
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
你只要登录,就会向服务器发送一个请求。这个请求就是你的信息 包括IP以及其他信息,有了这个,服务器向你发送信息很简单吧啊。
定时请求?
失落夏天 2013-10-19
  • 打赏
  • 举报
回复
你只要登录,就会向服务器发送一个请求。这个请求就是你的信息 包括IP以及其他信息,有了这个,服务器向你发送信息很简单吧啊。

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧