Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для acupation
67 / 67 / 6
Регистрация: 26.03.2010
Сообщений: 546

php и sockets

16.11.2012, 13:50. Показов 770. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Разрабатываю чат для игры и потребовалась ваша помощь.

В игре около 10 000 различных локаций, при переходе в локацию у нее свой чат (что-то типо комнат в чате). Соединение происходит по sockets дабы не нагружать БД, скорости и уменьшения трафика для клиента.

Не могу придумать схему на стороне сервера, чтобы он отдавал информацию только тем клиентам, которые находятся только в той локации в которой было послано сообщение... Положение клиента будет в БД и в сессии. Как хранить положение клиента в сессии и отдавать только ему?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.11.2012, 13:50
Ответы с готовыми решениями:

php sockets + flash
Всем привет! Образовалась проблема, делаю чат во флеше на сокетах с серверной базой на php. Не могу придумать как передать логин на...

PHP Sockets отсылка сообщений всем клиентам
Недавно начал изучать PHP и пишу игру. Клиент на flash сервер на PHP. К серверу подключаются несколько клиентов и на сервере я сохраняю их...

Sockets
client.php <?php $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_connect($socket,'localhost',8825); ...

3
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
17.11.2012, 01:20
Ну так всё зависит от того как у вас что сделано

Можно просто в цикле рассылки проверять локацию отправляемого сообщения и отправлять только тем кто в локации, это если у вас все клиенты хранятся в одном массиве.
А можно хранить для каждой локации список клиентов в отдельном массиве, и при отравке пробегать по всему массиву и отправлять.
1
 Аватар для acupation
67 / 67 / 6
Регистрация: 26.03.2010
Сообщений: 546
17.11.2012, 02:03  [ТС]
первоначально игра была написана на php + js + php. Сейчас решил переделать под flash. Скажи пожалуйста, какой из методов будет лучше и если можно - небольшой пример по этому методу для понимания.

Тут еще стоит вопрос про скорость. Мне кажется, если будет достаточное кол-во клиентов, то удобнее бы было хранить массив свой на каждую локацию, верно? в таком случае нужно при переходе из локации в локацию переносить клиентов из одного цикла в другой. Но тут встал вопрос: если в момент перехода клиенту отправляется приватное сообщение, которое видно в любой локации, то это сообщение может утеряться. Как в таком случае избежать потери сообщения? Я думаю можно к примеру при переходе в локацию подгружать из базы последние приватные сообщения к примеру за последние 5 минут, а ниже уже общий чат пойдет. Запись в БД все равно производится для логирования (хотя можно даже писать в файл, к примеру в xml и из него читать). Я даже не знаю как лучше вариантов много, а как оптимально сделать не могу решиться.
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
17.11.2012, 04:46
Ну я думаю не что не мешает хранить общий массив всех подключений, а так же хранить массив для каждой локации.
PHP
1
2
$clients = array($user1->id => $sock1, $user2->id => $sock2,...);
$users_in_location['location_1'] = array($user1->id, ...);
Надо получить подключения для юзеров в локации
PHP
1
2
3
4
foreach ($$users_in_location['location_1'] as $id)
{
    //$clients[$id]
}
Ну а просто юзеру отправить, не зависимо от локации
PHP
1
//$clients[$user_id]
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.11.2012, 04:46
Помогаю со студенческими работами здесь

Простой сервер (sockets)
Есть простейший сервер на сокетах, написанный на PHP (исходный код находится в файле server.php). <?php error_reporting(E_ALL); ...

PHP sockets
Всем доброго времени суток. Начал немного изучать веб сокеты. Сейчас столкнулся с такой проблемой: как мне при отправке сообщения через...

Mask string php sockets
Доброго времени суток! Есть функция, накладывающая маску на текст, отправляемый сокетом на PHP клиенту private function mask($text){...

Sockets
Всем привет, нужно помощь в сокетах. Имеются три класса: Главный: public class Main { public static void main(String args){ ...

Sockets
Здравствуйте! Собираюсь переписать свою программу, работающую по протоколу ICQ, на собственный. Перерыл уже весь интернет в поисках...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru