Node.js 几乎已成为实时框架的代名词,但也有其他技术的解决方案。对于 PHP 解决方案,您可以查看Ratchet。您可以在我正在策划的实时网络技术指南中找到包含其他语言的更详细列表。
如果您宁愿卸载客户端和服务器之间的持久连接,那么您可以查看我为之工作的实时托管服务,例如Pusher。如果你要这样做,你可以:
将库添加到您的 HTML 并连接到 Pusher
<script src="http://js.pusher.com/1.12/pusher.min.js"></script>
<script>
var pusher = new Pusher( 'YOUR_APP_KEY' );
// Additional JavaScript - see below
</script>
订阅短信频道
var smsChannel = pusher.subscribe( 'sms' );
为传入的 SMS 消息绑定到通道上的事件
smsChannel.bind( 'incoming', function(){} );
处理事件并根据需要更新您的应用
smsChannel.bind( 'incoming', function( smsData ) {
var phoneNo = smsData[ 'PhoneNo' ];
var msg = smsData[ 'Msg' ];
// Update the UI as required.
} );
在更新数据库后,您需要在服务器上调用 Pusher。
包括 Pusher 库
// See: http://pusher.com/docs/server_libraries#php
require('Pusher.php');
处理对 PHP 脚本的请求
// I've had to guess a bit here. Hopefully you can convert this to something which meets your requirements/data structures
$update = $_POST['sms_data'];
$query = sprintf("INSERT INTO updates (Phoneno, Msg) VALUES ('%s', '%s')",
mysql_real_escape_string( $update['Phoneno'], $update['Msg'] ) );
$result = mysql_query($query);
if($result) {
// trigger event
}
触发事件
if( $result ) {
// Use key, secret and id defined from config somewhere
$pusher = new Pusher( PUSHER_APP_KEY, PUSHER_APP_SECRET, PUSHER_APP_ID);
$data = array( 'Phoneno' => $update['Phoneno'], 'Msg' => $update['Msg'] );
$pusher->trigger( 'sms', 'incoming', $data );
}
尽管此示例使用 Pusher,但您将能够使用其他实时 Web 技术遵循类似的模式。
如果您想使用自托管选项,您需要管理由持久连接使用的资源,让服务器立即通知客户端新的 SMS。如果您使用托管服务,则无需担心这一点。
我还写了一篇关于使用 Pusher 和Twilio的教程,它的作用与您在此处尝试实现的非常相似。代码虽然在 Ruby 中。见:
http: //www.twilio.com/blog/2012/07/pusher-and-twilio-making-realtime-fuctionality-easy.html