新手请教一下JAVA 服务器端编程如何实现 即时消息提醒?

caixiexin 2011-09-25 03:51:41
具体是这样的,我们在做一个类似微博的系统,是手机版的
我做的是PC上的服务器端,用的是Socket编程,其他增删改查功能都已经初步实现了
现在需要一个功能 就是即时提醒
比如某个用户自己发的帖子被别人评论了,服务器要告知这个用户你的帖子被人回复了
这要怎么实现呢

我这个月刚接触JAVA的网络编程,还不是很清楚,
各位能否帮我缕缕思路,或者告诉我要用什么技术啊?
PS:只剩下20分了,不好意思,这是我CSDN的全部财产啦= =
...全文
562 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuoyi1111 2013-07-05
  • 打赏
  • 举报
回复
引用 14 楼 fainfy 的回复:
根据楼主的说法,你们应该是一个操作就会有一个Socket了。 比如增加有增加的连接,删除有删除的连接。这样行吗? 难道不是统一的一个Socket吗?由这个Socket把读取到的数据分发到不同的地方去处理,我想应该是这种模式吧。
我准备做一个即时提醒功能,想知道你最后是怎么做的?
钢铁雄心 2013-06-04
  • 打赏
  • 举报
回复
楼主是怎么做的啊!正好碰见这个问题.....邮箱budejin123@126.com 求告知
adasdsdsasd 2012-11-02
  • 打赏
  • 举报
回复
楼主 能不能把代码贴上来 我现在也做消息推送的东东

PS:caixiexin和fainfy的头像很般配啊 哈哈
fainfy 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 caixiexin 的回复:]

引用 14 楼 fainfy 的回复:

根据楼主的说法,你们应该是一个操作就会有一个Socket了。
比如增加有增加的连接,删除有删除的连接。这样行吗?

难道不是统一的一个Socket吗?由这个Socket把读取到的数据分发到不同的地方去处理,我想应该是这种模式吧。

我这边所有操作都是属于一个Socket的,因为它们请求和接受回复的方式是一样的,但是这个消息提醒跟其他操作时不……
[/Quote]

这个给你说也说不明白,你直接代码帖上来。如果是因为公司的代码不能外泄,就自己写个小DEMO先帖下来。
caixiexin 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 fainfy 的回复:]

根据楼主的说法,你们应该是一个操作就会有一个Socket了。
比如增加有增加的连接,删除有删除的连接。这样行吗?

难道不是统一的一个Socket吗?由这个Socket把读取到的数据分发到不同的地方去处理,我想应该是这种模式吧。
[/Quote]
我这边所有操作都是属于一个Socket的,因为它们请求和接受回复的方式是一样的,但是这个消息提醒跟其他操作时不一样的吧,普通的操作是客户端请求,然后获取服务端的答复。而 消息提示 那边难道客户端不是用一个线程,单独来接收服务器发过来的新消息的提示吗?
fainfy 2011-09-25
  • 打赏
  • 举报
回复
根据楼主的说法,你们应该是一个操作就会有一个Socket了。
比如增加有增加的连接,删除有删除的连接。这样行吗?

难道不是统一的一个Socket吗?由这个Socket把读取到的数据分发到不同的地方去处理,我想应该是这种模式吧。
caixiexin 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fainfy 的回复:]

引用 11 楼 caixiexin 的回复:

引用 10 楼 fainfy 的回复:

引用 8 楼 caixiexin 的回复:

引用 1 楼 fainfy 的回复:

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

用户发表评论的时候,是……
[/Quote]
同一个SOCKET?但是手机客户端那里,用户操作跟接收消息提醒 不应该是属于不同线程的吗,2个线程可以用同一个Socket 同一个IO流 进行读写吗?
fainfy 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 caixiexin 的回复:]

引用 10 楼 fainfy 的回复:

引用 8 楼 caixiexin 的回复:

引用 1 楼 fainfy 的回复:

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

用户发表评论的时候,是通过一个SOCKET 与服务器交互的,当评论成功后,……
[/Quote]

具体我不知道你们是怎么来做的。
C2S是长连接的话,一般都是只有一个Socket,所有的数据输出、写入都是走同一个In/Out。

不过这里,我想应该把楼主那个连接获取到了,输出到客户端应该就可以了,客户端根据协议解析数据就可以了。
caixiexin 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 fainfy 的回复:]

引用 8 楼 caixiexin 的回复:

引用 1 楼 fainfy 的回复:

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

用户发表评论的时候,是通过一个SOCKET 与服务器交互的,当评论成功后,服务器怎么通过另一个SOCKET通知被评论的楼……
[/Quote]
恩,但是楼主在线的时候,他的那个Socket连接的IO流是用于他提交请求和接受服务器回复的,是不是要另外用一个SOCKET连接服务器,专门接收 回帖的提示?
fainfy 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 caixiexin 的回复:]

引用 1 楼 fainfy 的回复:

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

用户发表评论的时候,是通过一个SOCKET 与服务器交互的,当评论成功后,服务器怎么通过另一个SOCKET通知被评论的楼主(另一个客户端)呢?(我服务器为每个连接过来的S……
[/Quote]

首先楼主在线的时候,会和服务器保持一个连接吧。帖子被回复了,是不是可以知道楼主的信息。
具体你们怎么获取楼主的信息这个是你们内部的实现。

PS:这个功能肯定是楼主要在线的时候才有效,如果楼主不在线,也没有必要通知楼主是吧。
caixiexin 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fainfy 的回复:]

引用 2 楼 caixiexin 的回复:

引用 1 楼 fainfy 的回复:

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

我们的手机端 Socket连上服务器就没有断开,算是长连接吧?那我想问一下, 通知客户端这个要怎么实现呢
我们客户端平……
[/Quote]

我们已经做了一个简单的协议,就是把数据加个请求类型,然后一起写到流里。我现在纠结的是,服务器在操作完添加评论的Socket后,如何连接楼主的客户端,然后给他发消息?
caixiexin 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fainfy 的回复:]

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。
[/Quote]
用户发表评论的时候,是通过一个SOCKET 与服务器交互的,当评论成功后,服务器怎么通过另一个SOCKET通知被评论的楼主(另一个客户端)呢?(我服务器为每个连接过来的SOCKET都有专门开一个线程)
my_caterpillar 2011-09-25
  • 打赏
  • 举报
回复
现在比较流行"推" 提示一下 希望高手帮你解答
fainfy 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caixiexin 的回复:]

引用 1 楼 fainfy 的回复:

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

我们的手机端 Socket连上服务器就没有断开,算是长连接吧?那我想问一下, 通知客户端这个要怎么实现呢
我们客户端平时提交请求用的是一个Socket的IO流 ,如果要……
[/Quote]

其他增删改查功能都已经初步实现了
具体的输出格式这个是你们内部的协议(双方可以协定一下)。
你向服务器写数据的时候是使用OutputStream。读数据的时候是使用InputStream。服务器也是一样的。
要向客户端发送一条信息,就使用OutputStream输出。

假设目前双方协定,如果服务器输出“A”表示是有帖子被回复了,那么客户端如果收到A就应该做提醒操作。
caixiexin 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dengxiayehu 的回复:]

引用 1 楼 fainfy 的回复:

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

这个不错,应该可行。
[/Quote]
具体怎么实现呢,我网络编程是菜鸟,是重新用一个SOCKET的IO流来通信吗
_了凡_ 2011-09-25
  • 打赏
  • 举报
回复
另开个Socket的IO流吧,分工明确,不然扯在一起不好弄吧。
坐等高手出现……
_了凡_ 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fainfy 的回复:]

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。
[/Quote]
这个不错,应该可行。
caixiexin 2011-09-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fainfy 的回复:]

有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。
[/Quote]
我们的手机端 Socket连上服务器就没有断开,算是长连接吧?那我想问一下, 通知客户端这个要怎么实现呢
我们客户端平时提交请求用的是一个Socket的IO流 ,如果要通知客户端,用的是另一个Socket的IO流还是用原来那个呢?
fainfy 2011-09-25
  • 打赏
  • 举报
回复
有两种方案。
1.C2S如果是长连接,那如果帖子被回复了就直接通知一下客户端就可以了。
2.C2S如果是短连接,那只有由客户端模拟定时器,定时向服务器监听是否有帖子被回复。

62,614

社区成员

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

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