我正在评估Pusher和PubNub,以便在我的主要Web客户端和我的服务器之间实现双向实时通信.两者看起来都令人印象深刻,Pusher的文档看起来更好,而PubNub的可扩展性和可靠性显然是他们的强项.
但是,由于我正在管理预算,我担心Pusher和PubNub的成本可能会成为我们的问题,因此我正在考虑使用其中一个开源替代品 - 我主要关注的是Socket.io,Faye和jWebSocket.
尽管我自己运行服务,但我有自己的顾虑:
感谢您的建议.
我查看了类似的论坛,但无法使任何解决方案起作用.我试图将变量从flask传递到我的java脚本文件.然后,这些值将用于我的javascript文件中的PubNub.
这是我的Python代码的一部分:
@app.route("/mysettings/")
def user_settings():
return render_template('Settings.html', project_name = session['project_name'] , publish_key = session['publish_key'] , subscribe_key = session['subscribe_key'] )
Run Code Online (Sandbox Code Playgroud)
这是我的javascript代码(app.js)的一部分:
var settings = {
channel: {{project_name}},
publish_key: {{publish_key}},
subscribe_key: {{subscribe_key}}
};
Run Code Online (Sandbox Code Playgroud)
如果我在我的Settings.html文件中使用它而不是在app.js文件中,则此代码有效.
我正在使用Php和MySQL.
我刚刚注册了pubnub push API,并使用Pubnub提供的PHP Push API成功完成了我的第一个推送通知.我是这个实时技术的新手,所以我想出了一些让我很难理解的问题.我已经google了很多次搜遍了stackoverflow.我在其他地方没有得到任何相关的建议或问题,所以我在这里写下我的问题,寻求你的建议和专业知识帮助.
Pubnub说每个客户创建两个以上的频道并不是一件好事.因此,在我的应用程序中,我需要创建两个以上的频道来收听我网站上发生的任何通知,但我会像Pubnub建议的那样为每个登录用户提供两个频道.
仅供参考:PubNub中的此链接说明了如何创建LongChannel名称以避免Channel Snooping
我的问题如下:
A.每次登录网站时,我是否总是要创建一个新的私有动态频道名称.如果是这样,其他用户如何知道如何向我的私有频道发送通知.或者,我只需要在数据库表中只存储一个静态频道名称,以便其他经过身份验证的用户将查询该表并获取我的私有频道姓名给我发送通知.如果是这种情况,你不觉得黑客是否掌握了某些用户的私人频道名称,他们是否能够收听该频道?
B.我正在使用PHP和MySQL,所以我仍然无法想出办法或想出一个解决方案来向另一个用户的私人频道发送消息.
让我们举一个简单的朋友请求系统的例子.
- UserA向UserB发送好友请求.
- UserB正在监听他自己的动态专用通道名称DynamicPrivateChannelB
(UserA如何找到UserB的私有通道名称?我认为唯一的方法是UserB的私有通道应该存储在每个数据库表中登录用户查询.我在想正确的方法吗?)
<?php
//first way. How can i possibly achieve this.
$sqlquery = "sent friend request from userA to userB";
require('Pubnub.php');
$pubnub = new Pubnub( 'pubkey', 'subkey' );
$pubnub->publish( array(
'channel' => 'how do i find the private channel name for userB to sent this notification?',
'message' => array('friend_request' => 'A friend request') )
);
//2nd way ? Is this the …
Run Code Online (Sandbox Code Playgroud) 我看到PubNub说他们支持Socket.io - http://blog.pubnub.com/node-js-supercharged-by-pubnub/#socket.io-github
有人可以向我解释这里发生了什么,因为我认为PubNub与Socket.io的用途相同,因为它们都是实时消息传递的抽象层.在他们的GitHub页面上,它说它使Socket.io更快,但为什么他们首先与另一个平台集成?
在我看来,这就像微软Windows称他们现在支持Linux.如果您使用由Windows驱动的Linux,您将拥有更快的Linux.也就是说,这是一个荒谬的主张.
那么将Socket.io与PubNub一起使用的原因是什么,为什么不单独使用PubNub呢?
我最近开始在我的iOS应用程序中使用PubNub,我很高兴.但是,我一直在寻找其他可用的选项,例如使用Websockets的Pusher和Realtime.co.另一方面,PubNub使用长轮询.我已经完成了自己的小速度比较,为了我的目的,我发现它们都足够快.
PubNub提供了一些很好的功能,如消息历史记录和频道中每个人的列表,所以除了我倾向于他们的其他一切.我的问题是,我应该关注电池寿命和使用像PubNub这样的长轮询解决方案的大量使用吗?Websockets解决方案是否会显着提高功效?
我已经实现了PubNub订阅和发布代码.我的代码在活动上运行良好.但现在我想在服务类的帮助下在后台执行该代码.我创建了我的课程扩展IntentService
.我订阅了onCreate
方法中的pubnub频道.但每当我运行应用程序服务时,会立即停止而不显示pubnub状态.我正在关注pubnub错误.我也链接了pubnub所需的库.
04-09 23:39:32.621: D/Service Message(10033): error[Error: 100-1] : Timeout Occurred
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void startService(View v){
startService(new Intent(this, MyService.class));
}
public void stopService(View v){
stopService(new Intent(this, MyService.class));
}
}
Run Code Online (Sandbox Code Playgroud)
PubnubHandler.java
public class PubnubHandler{
public static final String GLOBAL_CHANNEL = "my_channel_name";
public static final String PUBLISH_KEY =
"my_publish_key";
public static final String SUBSCRIBE_KEY =
"my_subscribe_key";
private Context context;
private Pubnub pubnub;
public PubnubHandler(Context …
Run Code Online (Sandbox Code Playgroud) 我正在开始一个新的Cocoa Swift项目,该项目通过CocoaPods将PubNub SDK与以下Podfile结合在一起:
target 'myProject' do
source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!
pod 'PubNub', '~>4.0'
pod 'Alamofire', '~> 1.3'
end
target 'myProjectTests' do
end
Run Code Online (Sandbox Code Playgroud)
在我自动生成的桥接头中,我将PubNub导入为:
#import <PubNub/PubNub.h>
Run Code Online (Sandbox Code Playgroud)
和我的AppDelegate.swift文件:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var client:PubNub?
func applicationDidFinishLaunching(aNotification: NSNotification) {
let config = PNConfiguration( publishKey: "Your_Pub_Key", subscribeKey: "Your_Sub_Key")
client = PubNub.clientWithConfiguration(config)
client?.addListener(self)
client?.subscribeToChannels(["Your_Channel"], withPresence: false)
client?.publish("Swift + PubNub!", toChannel: "demo", compressed: false, withCompletion: nil) }
func client(client: PubNub!, didReceiveMessage message: PNMessageResult!) {
println(message)
}
func applicationWillTerminate(aNotification: NSNotification) {
// Insert code …
Run Code Online (Sandbox Code Playgroud) 对于我的团队项目,我需要建议我们应该使用PubNub或Amazon Simple Notification Service(SNS).我发现PubNub的实现和使用非常简单但是我找不到任何具体的东西,它说明了亚马逊SNS的优点和缺点.
notifications push-notification amazon-web-services amazon-sns pubnub
我们目前正在为不同的客户开发iOS应用程序.
我们有一个模板应用程序和不同的派生应用程序(布局略有不同,但功能几乎相同).
我们选择在heroku上托管我们的后端,并使用PubNub-Addon(使用pub和sub到不同的通道)来处理推送通知.
这适用于一个应用程序.但是如果我们有多个应用程序,我们需要为每个iOS应用程序创建一个pub nub"应用程序",因为我们需要将iOS应用程序的PEM-File(APNS证书)上传到PubNub应用程序,这非常麻烦.
多个iOS应用程序是否有可能使用相同的PEM-File(APNS证书)?这样我们就可以为所有不同的iOS应用程序使用一个PubNub应用程序?
您有什么其他建议可以解决这个问题吗?
提前致谢!
我对“platformBrowserDynamic().bootstrapModule(app.app_module)”调用有问题,错误消息是“未捕获的错误:断言错误:传入的类型不是 NgModuleType,它没有 '?mod' 属性”。但是我可以在调试过程中看到这个属性: AppModule NgModule proto emod property
app.app_module 是一个新的 @NgModule 实例,用于引导我的自定义应用程序组件。我使用了打字稿。有没有人知道为什么会发生这种情况?
另外这里还有源 JS 代码https://gist.github.com/sunnygleason/74e84acd0a03a925ec901594723ce876 我正在将它转换成 Typescript Angular CLI 项目。这是 https://github.com/AnatoliYatskevich/WIA
我更改的特定文件是: https: //github.com/AnatoliYatskevich/WIA/blob/master/src/main.ts https://github.com/AnatoliYatskevich/WIA/blob/master/src/index.html https: //github.com/AnatoliYatskevich/WIA/blob/master/src/app/app.component.ts https://github.com/AnatoliYatskevich/WIA/blob/master/src/app/app.module.ts
工具 WebStorm,来自https://www.pubnub.com/docs/angular2-javascript/pubnub-javascript-sdk 的示例格式。
谢谢
pubnub ×10
ios ×2
socket.io ×2
websocket ×2
amazon-sns ×1
android ×1
angular ×1
angular-cli ×1
battery ×1
cocoa ×1
cocoapods ×1
flask ×1
heroku ×1
java ×1
javascript ×1
long-polling ×1
ng-modules ×1
python ×1
signals ×1
swift ×1
typescript ×1
xcode ×1