Умный PHP-чат для Юнити, который работает через Comet!

Лучший способ помочь другим, поделиться своими находками.

Умный PHP-чат для Юнити, который работает через Comet!

Сообщение Nolex 26 мар 2012, 22:18

Сразу скажу, особенность этого php-чата в том, что он обновляется только когда есть новые сообщения в чате. В то время, как обычные php-чаты, посылают запросы обновления каждые 2-3 секунды, независимо от того, если ли новые сообщение, или нету.

Вы спросите, "как это работает"? А работает оно по технологии Comet(длительные http-запросы).
Подробнее: _http://ru.wikipedia.org/wiki/Comet_(программирование)

В итоге, мы с камрадом gnoblin`ом, установили этот чат и запустили под Юнити. Все оказалось очень просто. :)

Исходники чата, пример портирования в Юнити

Сам PHP-чат на Comet бесплатно берем тут: http://www.zeitoun.net/articles/comet_and_php/start
Ставим чат, выставляем права на data.txt. Тут все просто. Когда настроили чат,пробуем запустить, он должен работать через браузер. Теперь остаётся подключить его к Юнити3д.

Вот скрипт на C#:

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
 
[System.Serializable]
public class ChatResponse
{
    public string msg;
    public long timestamp;
}
 
public class CometTest : MonoBehaviour
{
    string db_url = "http://nolex.biz/chat/backend.php";
 
    long last_timestamp = 0;
    WWW comet_www;
    void Start()
    {
        comet_www = new WWW(db_url + "?timestamp=" + last_timestamp);
        StartCoroutine(WaitingForResponse(comet_www, ParseResponse));
    }
 
 
    string chat_msg = "";
 
 
    List<string> message_list = new List<string>();
 
    void OnGUI()
    {
 
        chat_msg = GUILayout.TextField(chat_msg, GUILayout.Width(150));
 
        if (GUILayout.Button("send"))
        {
            if (chat_msg != "")
            {
               // message_list.Add(chat_msg);
                StartCoroutine(WaitingForResponse(new WWW(db_url + "?msg=" + chat_msg), null));
            }
        }
         
        for(int i=0; i<message_list.Count; i++)
        {
            GUILayout.Label(message_list[i]);
        }
    }
 
    void OnApplicationQuit()
    {
        if (comet_www != null)
        {
            comet_www.Dispose();
            comet_www = null;
        }
    }
 
    void ParseResponse(string text)
    {
        if (text.Contains("{"))
        {
            JsonFx.Json.JsonReader reader = new JsonFx.Json.JsonReader(text);
            ChatResponse r = reader.Deserialize<ChatResponse>();
            Debug.Log(string.Format("msg: {0}, timestamp: {1}", r.msg, r.timestamp));
            last_timestamp = r.timestamp;
            message_list.Add(r.msg);
            comet_www = new WWW(db_url + "?timestamp=" + last_timestamp);
            StartCoroutine(WaitingForResponse(comet_www, ParseResponse));
        }
        else
        {
            Debug.Log("strange response");
        }
    }
 
    public IEnumerator WaitingForResponse(WWW www, RequestCallback callback)
    {
 
        //Debug.Log("" + Time.time);
        yield return www; // ожидаем пока получим с сервера данные
        //Debug.Log("" + Time.time);
 
        if (www.error == null)
        {
            //Debug.Log("Successful.");
        }
        else
        {
            Debug.Log("Failed.");
        }
 
        if (callback != null)
        {
            callback(www.text);
            callback = null;
        }
 
        //Очищаем данные
        www.Dispose();
        www = null;
    }
 
    public delegate void RequestCallback(string str);
 
    void DebugResponse(string s)
    {
        Debug.Log(string.Format("RESPONSE: {0}", s));
    }

}
//gnoblin
 


Онлайн-пример работы php-чата

- Стандартная браузерная версия: http://nolex.biz/chat/
- Веб-сборка на Unity3d: http://nolex.biz/chat/WebPlayer.html
Последний раз редактировалось Nolex 29 мар 2012, 21:14, всего редактировалось 1 раз.
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение mCoder 29 мар 2012, 17:28

Можете скинуть пожалуйста исходник в файле...?
А то этот не хочет работать, выдает что в нем ошибки...(
mCoder
UNец
 
Сообщения: 11
Зарегистрирован: 04 янв 2012, 14:30

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение mCoder 29 мар 2012, 21:08

Вот скрин:
sc.PNG
У вас нет доступа для просмотра вложений в этом сообщении.
mCoder
UNец
 
Сообщения: 11
Зарегистрирован: 04 янв 2012, 14:30

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение Nolex 29 мар 2012, 21:16

Форум автозаменой поставил "http://", убери и все заработает.
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение V0odo0 06 окт 2012, 01:31

Назрел вопросик по теме. Все сообщения, которые отправляются из юнити скрипту backend.php обрезаются после первого пробела, т.е. отправляем "Привет мир!", а приходит "Привет". В случае с веб версией все пробелы проходят. В чем может быть проблема?
[ My Unity Assets ]
[ Voodoo Games ]
Аватара пользователя
V0odo0
UNITрон
 
Сообщения: 202
Зарегистрирован: 25 мар 2011, 16:14
  • ICQ

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение gnoblin 06 окт 2012, 04:34

WWW.EscapeURL()/UnEscapeURL() попробуй перед отправкой
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение Ninjaschioice 22 окт 2012, 23:46

данная реолизация подойдёт для ммо проекта?
Аватара пользователя
Ninjaschioice
UNец
 
Сообщения: 28
Зарегистрирован: 20 сен 2012, 17:12

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение JIeo_NEED 24 мар 2013, 10:57

Помогите, пожалуйста! Работает с огромными косяками.

На странице вроде работает, но тоже часто случаются лаги, когда сообщения просто пропадают.
А в игре - вообще, два сообщения отправятся, и ошибки в консоли.

    1. 400 Bad Request
    2. You are trying to load data from a www stream which had the following error when downloading.
    3. 500 Internal Server Error



А иногда пишет "Successful", но при этом сообщения не выводятся...
Аватара пользователя
JIeo_NEED
UNITрон
 
Сообщения: 228
Зарегистрирован: 01 мар 2012, 14:37
Откуда: Владивосток, Приморский край, Россия.
Skype: Develeone
  • Сайт

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение Nolex 24 мар 2013, 11:55

JIeo_NEED писал(а):Помогите, пожалуйста! Работает с огромными косяками.

    1. 400 Bad Request
    2. You are trying to load data from a www stream which had the following error when downloading.
    3. 500 Internal Server Error

написано же в ошибке, что ты одновременно разу запросов делаешь используя WWW comet_www;
проверяй хотябы if (comet_www.isDone) перед отправкой
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение 1900Fast 25 окт 2013, 13:21

привет, какой у тебя хостинг? просто не все хостинги тянут эту нагрузку и сбрасывают!
1900Fast
UNIт
 
Сообщения: 84
Зарегистрирован: 05 сен 2013, 15:48

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение Nolex 25 окт 2013, 14:40

1900Fast писал(а):привет, какой у тебя хостинг? просто не все хостинги тянут эту нагрузку и сбрасывают!

Ну у меня сервачек за 30-40$, но это не важно. Должно работать на любом хосте по идее.
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение Diab10 25 окт 2013, 15:42

Nolex писал(а):А работает оно по технологии Comet(длительные http-запросы).


Т.е. соединение долго держит открытым? Так в апаче ограничено число соединений. Если превысит - будет тупить.
Я недавно с этим столкнулся на сервере - игроки долго качали файлы с сервера - количество соединений кончилось
Аватара пользователя
Diab10
Адепт
 
Сообщения: 3401
Зарегистрирован: 17 мар 2011, 20:42
Откуда: 123 RUS
Skype: diab1023

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение marikcool 25 окт 2013, 22:20

не вариант ребята, на 100 человек еще пойдет, а вот на 1к уже сольется, ваш чат держит соединение так еще бэкенд апач точно положит.
сам текст хоть в чем хранится?
marikcool
UNITрон
 
Сообщения: 174
Зарегистрирован: 05 дек 2012, 23:19

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение Nolex 26 окт 2013, 01:09

marikcool писал(а):не вариант ребята, на 100 человек еще пойдет, а вот на 1к уже сольется, ваш чат держит соединение так еще бэкенд апач точно положит.
сам текст хоть в чем хранится?

Сомневаюсь, что положит. На сколько я знаю, очень много всего юзают подобные технологии.
Пишет в txt файлик. По функционалу этот чат такой себе, его допиливать надо) Это больше как фо фан.

Можно смотреть в сторону IRC-чата. Есть бесплатные сервера, а на asset Store продается за 5-10 баксов инграция.
Разработка игр в студии Brinemedia .
Аватара пользователя
Nolex
UNIверсал
 
Сообщения: 483
Зарегистрирован: 17 окт 2010, 12:26
Откуда: Украина
Skype: exlumen
  • Сайт
  • ICQ

Re: Умный PHP-чат для Юнити, который работает через Comet!

Сообщение kolya9898 19 окт 2014, 18:41

Очень полезное решение для тех кто ни-ни в IRC и подобных решениях.
(popcorn) (c#)
В принципе, жрет не много ресурсов, не знаю зачем кому-то нужно чаты на 20тыс и больше.... на одну систему. Когда на большие решения покупают хостинг для ресурсо ёмких задач
Изображение
Аватара пользователя
kolya9898
UNITрон
 
Сообщения: 333
Зарегистрирован: 15 июл 2013, 19:28
Откуда: Челябинск
Skype: kolyan9898

След.

Вернуться в Исходники (Копилка)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2