【问题标题】:PHP SMPP Implementation, constantly opening and closing sockets: is it harmful?PHP SMPP 实现,不断打开和关闭套接字:有害吗?
【发布时间】:2014-05-05 20:08:11
【问题描述】:

我找到了这个 SMPP 收发器实现:

http://sourceforge.net/projects/php-smppv3-4/files/

我使用smpp_transceiver.php的方式如下:


档案send.php

require_once "smpp_transceiver.php";

...

// Open socket
$tx = new SMPP('SOME IP HERE', $port);                               // (1)
$tx->debug = false;
$tx->system_type = $systemType;
$tx->addr_npi = 1;

// Login as transmitter
$bindResult = $tx->bindTransmitter($username, $password);

$tx->sms_source_addr_npi = 1;
$tx->sms_source_addr_ton = 0;
$tx->sms_dest_addr_ton = 0;
$tx->sms_dest_addr_npi = 1;

// Send SMS
$sendResult = $tx->sendSMS($from, $to, $msg);

// Close socket
$tx->close();                                                        // (2)
$state2 = $tx->state;

// Delete object
unset($tx);

非常简单的问题:
可以不断打开 (1) 和关闭 (2) 套接字吗?

这个send.php 应该充当网络服务。
所以我会连续多次调用这个:

http://...../send.php?mobile=......&body=hey

http://...../send.php?mobile=......&body=blah

http://...../send.php?mobile=......&body=zort

http://...../send.php?mobile=......&body=troz

有人告诉我 SMPP 连接应该保持活动状态,这显然不会在这里发生。

那么,还有两个问题:

  1. 如何保持连接有效?假设这是 PHP 并且 smpp_transceiver.php 是一个非静态类。我希望对 send.php 的每次调用都使用相同的套接字连接。

  2. 如果前面的事情不可行,我是否应该对smpp_transceiver.php 实施某种同步锁(o)?

【问题讨论】:

    标签: php sockets smpp


    【解决方案1】:

    您应该尽可能保持连接处于活动状态,但这也是频繁频率的问题。

    如果“频繁”是一分钟几次,那么,这不是世界末日,继续。 如果“频繁”是每秒几次,那么您可能需要为实际的 SMPP 部分寻求另一种方法。对于需要长时间保持活动的服务,PHP 不是一个很好的选择。试试 python、node 或 ruby​​。

    【讨论】:

    • 我实际上在使用 java(带有 SMSLib),但我讨厌这个库。它的问题太多了。关于您的问题,“频繁”有时意味着每秒 1 条短信。有时必须发送 300 条 SMS 捆绑包(都具有不同的正文),因此向 send.php 发出 300 个 HTTP 请求(在我今天的场景中为 send.jsp)
    • 你用的是php还是java?这会极大地影响答案。
    • 我做的三个问题都是针对PHP的。在我之前的评论中,我的意思是我将停止使用 Java+“SMSLIB”... 很抱歉造成混淆
    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2011-06-19
    • 2017-12-24
    • 2013-02-07
    • 1970-01-01
    相关资源
    最近更新 更多