这是我的情况.我有一个聊天室网站.人们在一起公开聊天,每个人都看到谁在写什么.所有的聊天记录都存储在数据库中(mysql)
现在我想在Android上实现这个聊天.因此,当用户从他的手机发送文本时,它应该被发送到聊天室网站,反之亦然,这意味着Android用户应该看到从聊天网页发送的所有文本.
结果是:
1:Android用户应该看到人们通过网页发送的所有文本,
2:Android用户应该能够向此聊天室网页发送文本(因此正在使用该网页聊天的其他用户应该看到他的文本).
最大的问题是,实现这一目标的最佳方法是什么?
这个过程可以像XMPP一样实时发生吗?
GCM是唯一的方式(虽然它不是实时的)?
如果我使用Web服务将消息发送到Web,我如何为传入消息设置监听器?
我不知道我是否清楚.任何帮助表示赞赏.只要给出字符串的头部我就会走到尽头……
编辑:服务器端问题:当MYSQL中的特定表发生更改时(例如添加新行时),是否有服务器执行某些操作?
解决方法:
我想到的第一件事就是它非常适合Pub / Sub范式.客户端将聊天消息发布到特定频道(会议室),并订阅频道;服务器订阅一个通道并将数据存储在MySQL数据库中.
您可以尝试使用像PubNub这样的外部实时网络. PubNub可以免费获取最多1米的消息(参见pricing page.)他们有一个Android SDK和PHP SDK(我假设你在服务器上使用PHP,因为你使用了PHP标签.)
在您的情况下,在您的Android客户端中,您订阅了一个频道:
Pubnub pubnub = new Pubnub("demo", "demo");
try {
pubnub.subscribe("my_channel", new Callback() {
//See full example for all Callback methods
@Override
public void successCallback(String channel, Object message) {
System.out.println("SUBSCRIBE : " + channel + " : "
+ message.getClass() + " : " + message.toString());
}
}
} catch (PubnubException e) {
System.out.println(e.toString());
}
(Full example here.)然后,当您要发布消息时:
Callback callback = new Callback() {
public void successCallback(String channel, Object response) {
Log.d("PUBNUB",response.toString());
}
public void errorCallback(String channel, PubnubError error) {
Log.d("PUBNUB",error.toString());
}
};
pubnub.publish("my_channel", "This is an important chat message!" , callback);
整齐!但是你的服务器怎么样,它是如何收到这些消息的呢?
$pubnub = new Pubnub(
"demo", ## PUBLISH_KEY
"demo", ## SUBSCRIBE_KEY
"", ## SECRET_KEY
false ## SSL_ON?
);
$pubnub->subscribe(array(
'channel' => 'my_channel', ## REQUIRED Channel to Listen
'callback' => function($message) { ## REQUIRED Callback With Response
## Time to log this to MySQL!
return true; ## Keep listening (return false to stop)
}
));
我希望这有助于你的项目.让我知道事情的后续.