0

0

客户端app redis nodejs推送消息 ?

php中文网

php中文网

发布时间:2016-06-06 20:20:21

|

2006人浏览过

|

来源于php中文网

原创

目前我的需求是这样的:
客户端app(目前只是ios app)准备通过长连接方式连接到服务器端
我已经查阅了相关的资料 ,php中可以通过 swoole workerman 感觉这2个难度有点大, 感觉对于socket底层不熟悉的难度太大, 后来看了 nodejs 感觉这个应该可以进行实现,今天看了下nodejs ,想使用他的tcp 协议那种形式,暂时不考虑web 浏览器端,代码如下:

var net = require('net');
var server = net.createServer(function(connection) { 
   console.log('client connected');
   connection.on('end', function() {
      console.log('客户端关闭连接');
   });
   connection.on('data' , function(data){
        var strData = data.toString();
        var strSign = strData.substr(0, 32);
        var strJson = strData.substr(32);
        get_redis_data();
        console.log(strSign+"---"+strJson);
   });
   
   connection.write('Hello World!\r\n');
   connection.pipe(connection);
});
server.listen(8080, function() { 
  console.log('server is listening');
});

上面的代码只是使用了 nodejs的net模块, 实现了一个客户端连接到服务器,客户端需要触发一个动作发送消息到服务器 , 然后服务器才返回信息给客户端, 那么问题来了。。
1:我现在要实现的是客户端用户登录之后,然后才进行tcp连接,客户端登录之后 ,会有一个加密的uid参数 , 我会根据这个加密的uid进行推送消息(查询当前的用户是否有新的消息)
2:目前这个消息准备采用redis来实现, 那么问题来了, redis如何保存这个消息, 看了下redis 可以使用队列 , string 之类的, 但是问题是,当给用户发了消息之后 ,如果标识这个消息已经被读了呢??? 怎么选择合适的存储消息的格式呢??

请大神们不吝赐教。。。
另外备注下我的服务器配置:
*8核的cpu
内存:8G
硬盘:固态硬盘
带宽:公网4M的
里面目前已经安装的服务是 web服务, 数据库服务是在另外的一台上面*
在备注下:
-----目前有没有现成的开放平台能实现我上面所说的。。。。。。(需要付费的也没关系),其实是一句话概括 , 客户端和服务端保持长连接, 需要进行推送消息到客户端

PushSharp移动消息推送库
PushSharp移动消息推送库

PushSharp实现了服务器端向移动客户端推送消息的库,支持iOS (iPhone/iPad APNS),Android (C2DM and GCM - Google Cloud Message),Windows Phone,和Windows 8 devices!

下载

回复内容:

目前我的需求是这样的:
客户端app(目前只是ios app)准备通过长连接方式连接到服务器端
我已经查阅了相关的资料 ,php中可以通过 swoole workerman 感觉这2个难度有点大, 感觉对于socket底层不熟悉的难度太大, 后来看了 nodejs 感觉这个应该可以进行实现,今天看了下nodejs ,想使用他的tcp 协议那种形式,暂时不考虑web 浏览器端,代码如下:

var net = require('net');
var server = net.createServer(function(connection) { 
   console.log('client connected');
   connection.on('end', function() {
      console.log('客户端关闭连接');
   });
   connection.on('data' , function(data){
        var strData = data.toString();
        var strSign = strData.substr(0, 32);
        var strJson = strData.substr(32);
        get_redis_data();
        console.log(strSign+"---"+strJson);
   });
   
   connection.write('Hello World!\r\n');
   connection.pipe(connection);
});
server.listen(8080, function() { 
  console.log('server is listening');
});

上面的代码只是使用了 nodejs的net模块, 实现了一个客户端连接到服务器,客户端需要触发一个动作发送消息到服务器 , 然后服务器才返回信息给客户端, 那么问题来了。。
1:我现在要实现的是客户端用户登录之后,然后才进行tcp连接,客户端登录之后 ,会有一个加密的uid参数 , 我会根据这个加密的uid进行推送消息(查询当前的用户是否有新的消息)
2:目前这个消息准备采用redis来实现, 那么问题来了, redis如何保存这个消息, 看了下redis 可以使用队列 , string 之类的, 但是问题是,当给用户发了消息之后 ,如果标识这个消息已经被读了呢??? 怎么选择合适的存储消息的格式呢??

请大神们不吝赐教。。。
另外备注下我的服务器配置:
*8核的cpu
内存:8G
硬盘:固态硬盘
带宽:公网4M的
里面目前已经安装的服务是 web服务, 数据库服务是在另外的一台上面*
在备注下:
-----目前有没有现成的开放平台能实现我上面所说的。。。。。。(需要付费的也没关系),其实是一句话概括 , 客户端和服务端保持长连接, 需要进行推送消息到客户端

你的问题是如何在Redis中保存消息。针对你的需求,要能有推送列表,同时还需要保存未读已读状态。
我的方案是分开,将推送消息列表和消息列表分开,即每个用户保存一个需要推送的消息列表,以及一个该用户的历史消息列表。
对于消息推送列表无需保存任何状态,推送过去后就从列表移除,不管用户是否读取,在推送下发的同时将该消息添加到用户的历史消息列表,这里可以保存消息的读取状态。
历史消息列表不建议使用队列,建议分两个数据结构保存,由于消息列表显示是根据时间序,所以可以使用redis的有序列表,得分为时间戳,使用这个有序列表保存用户的消息列表(仅保存ID,方便查询分页),然后消息的具体信息,如内容、读取状态、时间、发送人等保存到一个hash结构中,key就是消息ID。


欢迎指正

写长连接服务常用的还是socket.io 提供了方便的api去管理连接,并且并发处理的也比较好,不论点对点推送还是群推。SF的消息推送用的就是这个=W=。推送消息或接受客户端消息流量大的话可以搭一个Redis的消息队列,将socket服务和其他后端模块打通。
http://socket.io/

欢迎参考NoNOIM

相关专题

更多
Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

37

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

37

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

19

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.13

PHP缓存策略教程大全
PHP缓存策略教程大全

本专题整合了PHP缓存相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

交互式图表和动态图表教程汇总
交互式图表和动态图表教程汇总

本专题整合了交互式图表和动态图表的相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

9

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 7万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号