OK論壇

 找回密碼
 註冊
查看: 5632|回復: 50

ea13374 sql 人數到60馬上跳掉

 關閉 [複製鏈接]

該用戶從未簽到

發表於 2009-1-22 18:09:42 | 顯示全部樓層 |閱讀模式
EA
私服版號: ea13374 sql
問題內容: SQL問題
只要人數到60人 map-server會馬上出問題 跳掉
之後才會自動出開

我重新洗白了 資料庫也重建了 而且排序沒亂掉了

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
回復

使用道具 舉報

  • TA的每日心情
    開心
    2021-12-17 05:30 AM
  • 簽到天數: 237 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2009-1-22 18:16:49 | 顯示全部樓層
    你怎麼一天到晚出錯= =

    我去翻原碼找答案
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

     樓主| 發表於 2009-1-22 18:30:19 | 顯示全部樓層
    = =
    不知道阿
    我也降級了阿....
    我也不是願意的><
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

     樓主| 發表於 2009-1-22 18:53:23 | 顯示全部樓層
    版大= =
    可以救救我嗎
    我頭好痛了
    我搞了4.5天了

    結果我剛剛重建資料庫
    他排序又亂掉說
    我沒有在開機的時候在改了

    還是開機的時候進去資料庫看 也會這樣呢= =
    頭好痛喔...
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2021-12-17 05:30 AM
  • 簽到天數: 237 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2009-1-22 18:54:32 | 顯示全部樓層
    這是抽取出來的原碼
    不過很難看的懂
    繼續研究
    紅色部分是顯示錯誤的地方
    藍色是說明語法意義

    /// advance the WFIFO cursor (marking 'len' bytes for sending)
    int WFIFOSET(int fd, size_t len)
    {
    size_t newreserve;
    struct socket_data* s = session[fd];
    if( !session_isValid(fd) || s->wdata == NULL )
      return 0;
    // we have written len bytes to the buffer already before calling WFIFOSET
    if(s->wdata_size+len > s->max_wdata)
    { // actually there was a buffer overflow already
      uint32 ip = s->client_addr;
      ShowFatalError("WFIFOSET: Write Buffer Overflow. Connection %d (%d.%d.%d.%d) has written %d bytes on a %d/%d bytes buffer.\n", fd, CONVIP(ip), len, s->wdata_size, s->max_wdata);
      ShowDebug("Likely command that caused it: 0x%x\n", (*(unsigned short*)(s->wdata + s->wdata_size)));
      // no other chance, make a better fifo model
      exit(EXIT_FAILURE);
    }
    s->wdata_size += len;
    //If the interserver has 200% of its normal size full, flush the data.
    if( s->flag.server && s->wdata_size >= 2*FIFOSIZE_SERVERLINK )
      flush_fifo(fd);
    // always keep a WFIFO_SIZE reserve in the buffer
    // For inter-server connections, let the reserve be 1/4th of the link size.
    newreserve = s->wdata_size + ( s->flag.server ? FIFOSIZE_SERVERLINK / 4 : WFIFO_SIZE);
    // readjust the buffer to the newly chosen size
    realloc_writefifo(fd, newreserve);
    #ifdef SEND_SHORTLIST
    send_shortlist_add_fd(fd);
    #endif
    return 0;
    }
    int do_sockets(int next)
    {
    fd_set rfd;
    struct timeval timeout;
    int ret,i;
    // PRESEND Timers are executed before do_sendrecv and can send packets and/or set sessions to eof.
    // Send remaining data and process client-side disconnects here.
    #ifdef SEND_SHORTLIST
    send_shortlist_do_sends();
    #else
    for (i = 1; i < fd_max; i++)
    {
      if(!session)
       continue;
      if(session->wdata_size)
       session->func_send(i);
    }
    #endif
    // can timeout until the next tick
    timeout.tv_sec  = next/1000;
    timeout.tv_usec = next%1000*1000;
    memcpy(&rfd, &readfds, sizeof(rfd));
    ret = sSelect(fd_max, &rfd, NULL, NULL, &timeout);
    if( ret == SOCKET_ERROR )
    {
      if( sErrno != S_EINTR )
      {
       ShowFatalError("do_sockets: select() failed, error code %d!\n", sErrno);
       exit(EXIT_FAILURE);
      }
      return 0; // interrupted by a signal, just loop and try again
    }
    last_tick = time(NULL);
    #if defined(WIN32)
    // on windows, enumerating all members of the fd_set is way faster if we access the internals
    for( i = 0; i < (int)rfd.fd_count; ++i )
    {
      int fd = sock2fd(rfd.fd_array);
      if( session[fd] )
       session[fd]->func_recv(fd);
    }
    #else
    // otherwise assume that the fd_set is a bit-array and enumerate it in a standard way
    for( i = 1; ret && i < fd_max; ++i )
    {
      if(sFD_ISSET(i,&rfd) && session)
      {
       session->func_recv(i);
       --ret;
      }
    }
    #endif
    // POSTSEND Send remaining data and handle eof sessions.
    #ifdef SEND_SHORTLIST
    send_shortlist_do_sends();
    #else
    for (i = 1; i < fd_max; i++)
    {
      if(!session)
       continue;
      if(session->wdata_size)
       session->func_send(i);
      if(session->eof) //func_send can't free a session, this is safe.
      { //Finally, even if there is no data to parse, connections signalled eof should be closed, so we call parse_func [Skotlex]
       session->func_parse(i); //This should close the session immediately.
      }
    }
    #endif
    // parse input data on each socket
    for(i = 1; i < fd_max; i++)
    {
      if(!session)
       continue;
      if (session->rdata_tick && DIFF_TICK(last_tick, session->rdata_tick) > stall_time) {
       ShowInfo("Session #%d timed out\n", i);
       set_eof(i);
      }
      session->func_parse(i);
      if(!session)
       continue;
      // after parse, check client's RFIFO size to know if there is an invalid packet (too big and not parsed)
      if (session->rdata_size == RFIFO_SIZE && session->max_rdata == RFIFO_SIZE) {
       set_eof(i);
       continue;
      }
      RFIFOFLUSH(i);
    }
    return 0;
    }

    [ 本帖最後由 pan00017 於 2009-1-22 07:00 PM 編輯 ]
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2011-10-25 10:15 PM
  • 簽到天數: 121 天

    連續簽到: 0 天

    [LV.7]常住居民III

    發表於 2009-1-22 19:05:28 | 顯示全部樓層
    看了你幾篇 發帖
    似乎 你的socket 有問題
    老斷連  是硬體問題吧
    你有用分享器嗎  多人使用一條網路吧
    而且 感覺頻寬不夠  造成 map 跟login 狂跳
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    開心
    2021-12-17 05:30 AM
  • 簽到天數: 237 天

    連續簽到: 1 天

    [LV.7]常住居民III

    發表於 2009-1-22 19:08:12 | 顯示全部樓層
    #6
    有可能

    因為出現該訊息好像跟timeout有關

    可能在斷連的時候發生錯誤了
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

     樓主| 發表於 2009-1-22 21:11:15 | 顯示全部樓層

    回覆 5樓的 pan00017 的帖子

    跟本看不懂= =
    這個太深奧了...
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

     樓主| 發表於 2009-1-22 21:13:20 | 顯示全部樓層
    原帖由 bn5656 於 2009-1-22 07:05 PM 發表
    看了你幾篇 發帖
    似乎 你的socket 有問題
    老斷連  是硬體問題吧
    你有用分享器嗎  多人使用一條網路吧
    而且 感覺頻寬不夠  造成 map 跟login 狂跳



    但是我之前用這台開 txt 不會這樣阿= =
    我是有用分享器阿 但是 另一台主機用分享器開機也可以到260人
    這台也可以到120人左右

    但是自從用sql都怪怪的 = =
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2011-10-25 10:15 PM
  • 簽到天數: 121 天

    連續簽到: 0 天

    [LV.7]常住居民III

    發表於 2009-1-22 21:46:25 | 顯示全部樓層
    sql 是會佔用資源 應該比txt高些
    但不會差那麼多
    大型的網路遊戲 都用資料庫管理
    ip分享器 問題大些
    老舊的問題 很大
    廠牌 跟價格是大學問
    我買便宜的 用1年 少了1半頻寬
    hinet    adsl幫我測試  一換掉提高一倍
    給你參考看看

    [ 本帖最後由 bn5656 於 2009-1-22 09:48 PM 編輯 ]
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

     樓主| 發表於 2009-1-22 21:50:28 | 顯示全部樓層
    那你的問題是要買資料庫喔
    我是用您在教學區的資料庫軟體架的說
    會更軟體有差嗎
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2011-10-25 10:15 PM
  • 簽到天數: 121 天

    連續簽到: 0 天

    [LV.7]常住居民III

    發表於 2009-1-22 21:58:28 | 顯示全部樓層
    我發現 你發了這麼多帖  怎會不懂 資料庫 是神麼
    sql  access 都是處裡資料庫的工具
    如果你還不清楚  以後管理上 你會有很大的障礙
    這方面 要自己加強了
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

     樓主| 發表於 2009-1-22 22:06:19 | 顯示全部樓層
    對阿= =
    我對sql真的很不熟 是真的
    我只知道sql要資料庫 要放到網路上而已....
    回復 支持 反對

    使用道具 舉報

    該用戶從未簽到

     樓主| 發表於 2009-1-22 22:16:19 | 顯示全部樓層
    資料庫會那樣是跟電腦配備有關嗎= =??
    資料庫的大小是有限制多少呢? <=因為我有記錄所有logs
    回復 支持 反對

    使用道具 舉報

  • TA的每日心情
    慵懶
    2012-10-4 02:22 AM
  • 簽到天數: 177 天

    連續簽到: 5 天

    [LV.7]常住居民III

    發表於 2009-1-22 22:36:48 | 顯示全部樓層
    select錯誤,,,換menu吧
    回復 支持 反對

    使用道具 舉報

    您需要登錄後才可以回帖 登錄 | 註冊

    本版積分規則

    Archiver|手機版|小黑屋|OK討論區

    GMT+8, 2024-5-6 01:58 AM , Processed in 0.083685 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回復 返回頂部 返回列表