Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.07.2011, 11:50
yo3o вне форума Посмотреть профиль Отправить личное сообщение для yo3o Найти все сообщения от yo3o
  № 1  
Ответить с цитированием
yo3o

Регистрация: Jun 2010
Сообщений: 153
По умолчанию socket общения между клиентов с одинаковым ИД

socket у меня на ПХП как это можно реализовать?

Старый 19.07.2011, 15:55
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
К сожалению, телепатию все еще не изобрели.
__________________
тонкий тролль, осеянный благодатью

Старый 19.07.2011, 16:29
yo3o вне форума Посмотреть профиль Отправить личное сообщение для yo3o Найти все сообщения от yo3o
  № 3  
Ответить с цитированием
yo3o

Регистрация: Jun 2010
Сообщений: 153
Gaen вот скрипт вы можете помочь?


PHP код:
#!/usr/bin/php -q
<?php

error_reporting
(E_ALL);

set_time_limit(0);

ob_implicit_flush();

$address 'localhost';
$port 9996;


//---- Function to Send out Messages to Everyone Connected ----------------------------------------
function send_Message($allclient$buf) {
  global 
$client_list;
  foreach(
$allclient as $client) {
    if(
$client_list[$client]['state'] && $client_list[$client]['nick'] != ""){
      
socket_write($clienttrim($buf).chr(0));
    }
  }
}

//---- Function to Send List of  Everyone Connected ----------------------------------------
function who($allclient$socket) {
  global 
$client_list;
  
$buf "";
  
$counter 0;
  foreach(
$allclient as $client) {
    
$buf.=$client_list[$client]['nick'].", ";
    
$counter++;
  }
 
// socket_write($socket, "There are $counter people in this room: $buf".chr(0));
}

//---- Function to Send out Messages to Individuals ----------------------------------------
function send_Single($socket$buf) {
  
socket_write($socket$buf.chr(0));
}



//---- Start Socket creation for PHP 5 Socket Server -------------------------------------

if (($master socket_create(AF_INETSOCK_STREAMSOL_TCP)) < 0) {
  echo 
"socket_create() failed, reason: " socket_strerror($master) . "\n";
}

socket_set_option($masterSOL_SOCKET,SO_REUSEADDR1);


if ((
$ret socket_bind($master$address$port)) < 0) {
  echo 
"socket_bind() failed, reason: " socket_strerror($ret) . "\n";
}


if ((
$ret socket_listen($master5)) < 0) {
  echo 
"socket_listen() failed, reason: " socket_strerror($ret) . "\n";
}



$read_sockets = array($master);
$client_list = array($master);

//---- Create Persistent Loop to continuously handle incoming socket messages ---------------------
while (true) {
  
$changed_sockets $read_sockets;

  
$num_changed_sockets socket_select($changed_sockets$write NULL$except NULLNULL);

  foreach(
$changed_sockets as $socket) {

    if (
$socket == $master) {

      
//---- Accept Incoming Connections and Request Nickname ----------------------------------------
      
if (($client socket_accept($master)) < 0) {
        echo 
"socket_accept() failed: reason: " socket_strerror($msgsock) . "\n";
        continue;
      } else {
    echo 
"[connection]:$client\n";
        
array_push($read_sockets$client);
    
$client_list[$client]['state'] = false;
    
send_Single($client"<?xml version=\"1.0\"?><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\0");
      }
    } else {

      
//---- Grab Incoming Messages From all Users ----------------------------------------
      
$bytes socket_recv($socket$buffer20480);

      
//---- Handle User Disconnects ----------------------------------------
      
if ($bytes == 0) {
    
$nick $client_list[$socket]['nick'];
        
$iindex array_search($socket$client_list);
        unset(
$client_list[$iindex]);
        
$index array_search($socket$read_sockets);
        unset(
$read_sockets[$index]);
        
socket_close($socket);
        
$allclients $read_sockets;
        
array_shift($allclients);
    if(
$client_list[$socket]['nick'] != "" && $client_list[$socket]['nick'] != "<policy-file-request/>"){
          
send_Message($allclients"$nick has left the room");
    }
      }else{
    if(
$bytes){
          
//---- Set Nickname ----------------------------------------
      
if($client_list[$socket]['state'] === false){
        
$client_list[$socket]['nick'] = $tempBuf trim(trim($buffer));
        echo 
$tempBuf." test";
        
//send_Single($socket, "Hello $tempBuf!  Welcome to the game!");
            
$allclients $read_sockets;
            
array_shift($allclients);
        
who($allclients$socket);
        if(
$client_list[$socket]['nick'] != "" && $tempBuf != "<policy-file-request/>"){
              
//send_Message($allclients, $client_list[$socket]['nick']." has entered the game.");
        
}
        
$client_list[$socket]['state'] = true;
      }else{
            
//---- Check Message for Commands, and Respond or Broadcast Message ----------------------------------------
            
$allclients $read_sockets;
            
array_shift($allclients);
        if(
trim($buffer) == "/who"){
          
who($allclients$socket);
        }else{
                      
send_Message($allclients$client_list[$socket]['']."".$buffer);
              
//send_Message($allclients, $client_list[$socket]['nick']." wrote: ".$buffer);
        
}
      }
    }
      }
    }
  }
}

?>
Добавлено через 11 минут
нужно как-то реализовать что-ли как комнаты для клиентов что-бы определенные клиенты общались с определенными клиентами! просто я делаю онлайн игру на flash и мне нужно реализовать свой внутренний чат для каждой комнате на одно сокете! поможете?

Старый 20.07.2011, 00:45
surlac вне форума Посмотреть профиль Отправить личное сообщение для surlac Найти все сообщения от surlac
  № 4  
Ответить с цитированием
surlac
 
Аватар для surlac

блогер
Регистрация: Nov 2010
Сообщений: 143
Записей в блоге: 1
Цитата:
Сообщение от yo3o Посмотреть сообщение
socket у меня на ПХП
Socket - это API, исходя из постановки задачи, не важно какая у него реализация.
По каждому новому TCP-подключению на серверный сокет сохраняете информацию о пользователе (комната/id) и распространяете сообщения тем пользователям, у которых номер_комнаты==сообщение.номер_комнаты.
А вообще, этот механизм неплохо реализован в SmartFoxServer - комнаты, чат...

Старый 20.07.2011, 17:55
yo3o вне форума Посмотреть профиль Отправить личное сообщение для yo3o Найти все сообщения от yo3o
  № 5  
Ответить с цитированием
yo3o

Регистрация: Jun 2010
Сообщений: 153
вот именно это мне и нужно! можете помочь с реализацией на пхп?

Старый 20.07.2011, 18:07
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 6  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
это к пхп программисту

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:57.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:57.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.