青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456


專注即時通訊及網游服務端編程
------------------------------------
Openresty 官方模塊
Openresty 標準模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 220951
  • 排名 - 117

最新評論

閱讀排行榜

來自 Csdn https://blog.csdn.net/nassue_sn

XMPP相關資料:https://blog.csdn.net/nassue_sn/article/category/6635474
Ejabberd相關資料:https://blog.csdn.net/nassue_sn/article/category/6601126


群聊離線消息實現:http://www.cnblogs.com/lovechengcheng/p/4083398.html

簡單集群搭建:https://blog.csdn.net/yongche_shi/article/details/52956125

C#連接ejabberd2.1.x —— agsxmpp
注冊新賬戶方法:(偽碼)

            XmppClientConnection xmppCon;
            xmppCon.RegisterAccount = true; // 設為true代表是新用戶注冊
            xmppCon.OnRegistered += (sender) => {
                // 新用戶注冊成功
            };
            xmppCon.OnRegisterError += (sender, e) => {
                // 老用戶重復注冊
            };
            xmppCon.Open();

























----------------------------------------- 下方內容因版本不匹配暫時廢棄 --------------------------------------------------


PHP通過xmlrpc注冊ejabberd用戶

http://www.bubuko.com/infodetail-551255.html

正在研發一款社交軟件,架構im使用了ejabberd作為xmpp服務器,于是遇到了如何通過php注冊xmpp用戶的問題。
解決方法有幾個:
1.用xmpphp框架發送含<body>元數據的消息到服務器要求處理,這個可參考:http://blog.csdn.net/newjueqi/article/details/7864066
//1、測試文件 adduser.php

include_once './XMPPHP/XMPP.php';

$conn = new XMPPHP_XMPP($host, 5222, $xmppUserName$xmppPassword,  'xmpphp', 'svn.zhaoduila.net', false);

try {
    $conn->connect();

    //發送好友請求、發送消息、刪除好友   需要以下兩行
    $conn->processUntil('session_start');
    $conn->presence();


    //添加用戶 
//    $conn->registerNewUser($xmppUserName, $xmppPassword, $email);

    //發送消息 
//    $conn->message('liuruikang1@svn.zhaoduila.net', 'This is a test message!');

    //發送好友請求
//    $conn->addRosterContact($jid, $name);

    //刪除好友

    $conn->deleteRosterContact($jid);

    $conn->disconnect();


catch (XMPPHP_Exception $e) {
    die($e->getMessage());
}

//2、我是直接把方法追加到  XMPP.php  文件中的

/**
  * Register a new user.
  *
  * @param $entity
  * Entity we want information about
  
*/
  public function registerNewUser($username$password = NULL$email){
    if (!isset($password))
        $password = $this->genRandomString(15);

    $id = 'reg_' . $this->getID();
    $xml = "<iq type='set' id='$id'>
                <query xmlns='jabber:iq:register'>
                    <username>" . $username . "</username>
                    <password>" . $password . "</password>
                    <email>" . $mail . "</email>
                    <name></name>
                </query>
            </iq>";
    $this->addIdHandler($id, 'register_new_user_handler');
    $this->send($xml);
  }


  /**
  * Handler for new user registration
  *
  * @param XML Object $xml
  
*/
  public function register_new_user_handler($xml){
          //dpm($xml);
          //var_dump($xml);

          switch ($xml->attrs['type']) {
            case 'error':
              $this->event('new_user_registered', 'error');
              break;
            case 'result':
                // dpm($xml->subs);
                $query = $xml->sub('query');
                $username='';
                $password='';
                if(!is_array($query->subs)) {
                    foreach ($query->sub as $key => $value) {
                        switch ($value->name) {
                            case 'username':
                                $username = $value->data;
                                break;

                            case 'password':
                                $password = $value->data;
                                break;
                        }
                    }
                }
                $this->event('new_user_registered', array('jid' => $username . "@{$this->server}", 'password' => $password));
            default:
                $this->event('new_user_registered', 'default');
        }
  }

  /**
   * Add contact to your roster
   
*/
  public function addRosterContact($jid$name$groups = array()){
      // return if there is no jid specified
      if(!$jidreturn;
      // set name to the jid if none is specified
      if (!$name) { $name = $jid; }
      $id = $this->getID();
      $xml = "<iq type='set' id='$id'>";
      $xml .= "<query xmlns='jabber:iq:roster'>";
      $xml .= "<item jid='$jid' name='$name'>";
      foreach ($groups as $group) {
              $xml .= "<group>$group</group>";
      }
      $xml .= "</item>";
      $xml .= "</query>";
      $xml .= "</iq>";
      $xml .= "<presence to='" . $jid . "' type='subscribe'/>";
      $this->addIdHandler($id, 'add_roster_contact_handler');
      $this->send($xml);
  }

  /**
  * @param XML Object $xml
  
*/
  protected function add_roster_contact_handler($xml) {
    // do anything you wish here
    $this->event('contact_added');
  }

  /**
  *
  * @param $jid
  *       Contact you wish to remove
  
*/
 
  public function deleteRosterContact($jid) {
    $id = $this->getID();
    $xml = "<iq type='set' id='$id'>";
    $xml .= "<query xmlns='jabber:iq:roster'>";
    $xml .= "<item jid='" . $jid . "' subscription='remove' />";
    $xml .= "</query>";
    $xml .= "</iq>";
    $this->addIdHandler($id, 'delete_roster_contact_handler');
    $this->send($xml);
  }

  /**
  *
  * @param XML Object $xml
  
*/
  protected function delete_roster_contact_handler($xml) {
    // do any handling you wish here
    $this->event('contact_removed');
  }


      function genRandomString($length){
        $str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
        $len=strlen($str)-1;
        $randstr='';
        for($i=0;$i<$length;$i++){
            $num=mt_rand(0,$len);
            $randstr .= $str[$num];
        }
        return $randstr;
      }
2.使用php的xmpp庫jaxl,其demo代碼中包含一個register_user的腳本,通過shell調用:
php example/register_user.php YOUR_DOMAIN
即可生成用戶,缺點是性能較差且慢,不建議
3.最優方法是使用ejabberd自帶的命令行工具ejabberdctl來直接生成用戶。網上的回答基本是通過修改sudo用戶組權限來直接在php使用exec語句來執行此命令
$username = ‘tester‘;
$password = ‘testerspassword‘;
$node = ‘myserver.com‘;
exec(‘sudo /usr/sbin/ejabberdctl register ‘.$username.‘ ‘.$node.‘ ‘.$password.‘ 2>&1‘,$output,$status);
if($output == 0)
{
    // Success!
}
else
{
    // Failure, $output has the details
    echo ‘<pre>‘;
    foreach($output as $o)
    {
        echo $o."\n";
    }
    echo ‘</pre>‘;
}
需要在sudoer文件中添加ejabberd用戶權限,相對不安全也比較麻煩,也不推薦。
4.其實ejabberd在最近的版本中已經集成了xmlrpc模塊,通過該模塊可直接訪問4560端口使用ejabberd的一些內部命令。官網介紹地址:https://www.ejabberd.im/ejabberd_xmlrpc
修改ejabberd.yml配置文件:

listen:
  -
    port: 4560
    ip: "::"
    module: ejabberd_xmlrpc
    access_commands:
      xmlrpc_access:
        commands: all
        options: []

..

commands_admin_access: xmlrpc_access

..

access_rules:
  xmlrpc_access:
    - allow: xmlrpc_acl

..

api_permissions:
  "console commands":
    from:
      - ejabberd_ctl
    who: all
    what: "*"
  "admin access":
    who:
      - access:
          - allow:
            - acl: loopback
            - acl: all
      - oauth:
        - scope: "ejabberd:admin"
        - access:
          - allow:
            - acl: loopback
            - acl: all

重啟后 telnet HOST地址 4560 看能否接通,即說明xmlrpc已經可以用了:
關于php端的代碼在介紹地址中已有提及,以下是php通過ejabberdctl注冊一個用戶的demo的代碼:
$params=array('user'=>'someUser','host'=>'ejabberdHost','password'=>'somPassword');
$request = xmlrpc_encode_request('register', $params, (array('encoding' => 'utf-8')));

$context = stream_context_create(array('http' => array(
    'method' => "POST",
    'header' => "User-Agent: XMLRPC::Client mod_xmlrpc\r\n" .
    "Content-Type: text/xml\r\n" .
    "Content-Length: ".strlen($request),
    'content' => $request
    )));

$file = file_get_contents("http://127.0.0.1:4560", false$context);

$response = xmlrpc_decode($file);

if (xmlrpc_is_fault($response)) {
    trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
else {
    print_r($response);
}
打印后即生成注冊成功的結果
Have a nice try! :)

Linux安裝php-xmlrpc擴展:
cd php-5.4.16/ext/xmlrpc
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-xmlrpc=shared --with-libxmlrpc=/usr/local
make
make install

添加到php.ini擴展即可

更多參考:
https://github.com/processone/ejabberd/issues/1231
https://github.com/processone/ejabberd/issues/1749
https://github.com/processone/ejabberd/issues/1568
https://bugs.php.net/bug.php?id=19124
https://www.ejabberd.im/ejabberd_xmlrpc/
https://blog.csdn.net/kenkao/article/details/53333595
https://blog.csdn.net/u012930316/article/details/55251903

https://www.cnblogs.com/--00/p/erlang_into_style.html
posted on 2019-02-12 09:34 思月行云 閱讀(964) 評論(0)  編輯 收藏 引用 所屬分類: Erlang
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产免费亚洲高清| 久久久福利视频| 欧美在线免费播放| 91久久综合| 亚洲国产女人aaa毛片在线| 国产精品―色哟哟| 欧美日韩一区高清| 欧美日韩免费观看一区=区三区| 久久国产精品高清| 久久不射电影网| 久热国产精品| 久久蜜桃精品| 欧美大成色www永久网站婷| 午夜精品理论片| 欧美在线亚洲一区| 久久综合色综合88| 最新高清无码专区| 日韩亚洲一区在线播放| 一区二区高清在线观看| 亚洲一区二区三区四区五区黄| 亚洲天堂av综合网| 久久美女性网| 国产精品二区在线观看| 在线欧美影院| 亚洲少妇中出一区| 久久久亚洲一区| 亚洲主播在线观看| 欧美r片在线| 国产综合欧美在线看| 亚洲香蕉在线观看| 亚洲电影免费观看高清完整版在线 | 亚洲精品日本| 午夜精品久久久久久久久久久久| 麻豆精品视频在线观看| 亚洲综合日本| 欧美日韩99| 一二三区精品福利视频| 亚洲国产精品99久久久久久久久| 性欧美18~19sex高清播放| 欧美三级在线播放| 亚洲精品综合| 亚洲激情影视| 欧美日韩三级电影在线| 久久夜色精品国产亚洲aⅴ| 国产精品一区二区久久久久| 欧美在线免费观看| 日韩午夜中文字幕| 欧美精品九九99久久| 亚洲午夜av| 欧美一区二区日韩| 亚洲欧美日韩综合| 欧美伊人久久| 亚洲国产91精品在线观看| 久久亚洲精选| 欧美日韩亚洲免费| 午夜精品久久久久久久99热浪潮| 亚洲一区二区高清| 狠狠色香婷婷久久亚洲精品| 免费成人高清在线视频| 欧美激情一区二区三区| 亚洲欧美成人| 欧美大片在线看免费观看| 亚洲欧美三级在线| 浪潮色综合久久天堂| 一区二区欧美视频| 久久久久久久久伊人| 亚洲欧美日韩精品在线| 欧美成va人片在线观看| 久久久欧美一区二区| 欧美日韩美女在线| 免费成人小视频| 狠色狠色综合久久| 亚洲欧美精品suv| 在线中文字幕一区| 欧美精品色网| 亚洲三级免费观看| 亚洲激情亚洲| 欧美成人a视频| 亚洲精品国精品久久99热| 9l视频自拍蝌蚪9l视频成人| 狠狠干综合网| 久久综合九色九九| 欧美gay视频激情| 亚洲高清视频一区二区| 久久不见久久见免费视频1| 久久国产精品一区二区| 国产日韩欧美不卡| 久久久久久夜精品精品免费| 老司机午夜精品视频在线观看| 国产综合婷婷| 嫩草影视亚洲| 一区二区日韩免费看| 欧美亚洲免费电影| 亚洲观看高清完整版在线观看| 欧美1区2区3区| 亚洲一区二区影院| 女同性一区二区三区人了人一| 在线观看日韩www视频免费| 欧美激情偷拍| 久久人91精品久久久久久不卡| 免费看亚洲片| 久久精品国产欧美激情| 亚洲精品久久嫩草网站秘色 | 亚洲国产精品成人久久综合一区| 91久久精品久久国产性色也91 | 亚洲日韩欧美视频| 欧美在线免费播放| 亚洲日韩视频| 国语精品中文字幕| 欧美性久久久| 欧美午夜视频一区二区| 久久午夜羞羞影院免费观看| 亚洲图色在线| 亚洲视频视频在线| 欧美伊久线香蕉线新在线| 性8sex亚洲区入口| 亚洲区免费影片| 亚洲人成毛片在线播放| 亚洲福利视频一区| 亚洲国产mv| 一本大道av伊人久久综合| 亚洲黄页视频免费观看| 亚洲精品国产精品乱码不99按摩 | 国产一区二区三区电影在线观看| 欧美高清自拍一区| 欧美成人中文字幕| 欧美另类综合| 欧美日韩免费观看一区| 国产精品日韩在线观看| 国产亚洲精品aa| 亚洲精品欧美| 午夜视频在线观看一区二区| 久久精品国产精品亚洲综合| 久久综合九色综合网站| 欧美激情中文不卡| 亚洲一区二区四区| 美女精品在线| 国产伦精品一区二区三区四区免费 | 另类国产ts人妖高潮视频| 欧美久久久久久久久久| 国产一区视频观看| 亚洲另类春色国产| 久久久精品免费视频| 亚洲欧洲一区| 久久精品国产久精国产爱| 欧美国产日韩一区二区| 国产嫩草一区二区三区在线观看 | 欧美在线观看一区| 欧美日韩国产三区| 亚洲黄色av| 另类欧美日韩国产在线| 亚洲一区二区黄色| 欧美精品在线免费| 亚洲老板91色精品久久| 欧美成人精品一区二区三区| 亚洲欧美日韩一区二区在线| 国产精品九色蝌蚪自拍| 亚洲精品免费在线播放| 美女精品在线观看| 久久野战av| 亚洲精品一区久久久久久| 欧美黄色大片网站| 欧美成人久久| 亚洲视频www| 亚洲欧美日韩区| 狠狠狠色丁香婷婷综合久久五月| 久久精品免费观看| 久久艳片www.17c.com| 亚洲日本欧美在线| aa国产精品| 国产日韩一区二区| 欧美xx视频| 欧美亚州一区二区三区| 久久精品亚洲国产奇米99| 久久在线观看视频| 午夜精品久久久久久久99樱桃| 欧美亚洲三级| 99国产精品久久| 欧美在线|欧美| 亚洲一区二区三区久久| 久久理论片午夜琪琪电影网| 中日韩在线视频| 久久婷婷人人澡人人喊人人爽| 一本色道久久综合亚洲精品小说| 午夜精品久久久| 亚洲综合欧美日韩| 欧美破处大片在线视频| 美女精品一区| 国内综合精品午夜久久资源| 欧美影院在线| 亚洲在线不卡| 宅男66日本亚洲欧美视频| 国产精品免费看久久久香蕉| 欧美激情一区二区三区在线视频 | 久久精品麻豆| 国产精品豆花视频| 亚洲精品免费一区二区三区| 一区二区三区亚洲| 西瓜成人精品人成网站| 久久久久女教师免费一区|